【问题标题】:Encrypt a string加密字符串
【发布时间】:2016-07-09 06:16:47
【问题描述】:

我正在编写一个以这种方式加密给定字符串的程序:

如果我们有一个整数 V 和一个只有元音的数组 v={a,e,i,o,u} 如果字符串的字母是元音,那么用它前面 V 个位置的元音替换它只考虑元音数组(而不是整个字母表!)。

要明确:

String: "uuuu" and V:2 -----> String_out: "iiii"
String: "aaaa" and V:2 -----> String_out: "oooo"
String: "iiii" and V:2 -----> String_out: "aaaa"

所以为了解决我的问题,我写了:

    V=2;
    char vow[5]={'a','e','i','o','u'};
    for(i=0;i<strlen(s);i++){
        flag=0;
    for(j=0;j<5 && flag==0;j++){
        if(*(s+i)==vow[j]){
            flag=1;
    }
        if(flag)
           *(s+i)=vow[j-V%5];
    }

代码获取字符串的每个元素,验证它是否是元音,然后如果它是元音,则用 V 位置之前的元音替换字符串的考虑元素。

如果字符串只有元音 i,o,u,则此代码有效,但如果它有 a,e,则输出将是错误的: 问题

char vow[5]={'a','e','i','o','u'};
j=1 // it will happen if the string is "eeee" in fact corresponds to 'e' in vow
V=2
vow[j-V%5]=... // j-V%5 is a negative number!!!!

那么我该如何解决字母 a 和 e 的问题,以便我不再在 vow[...] 中获得负数并正确遵守加密规则? 如果有什么不清楚的地方请告诉我,提前谢谢!!!

【问题讨论】:

    标签: c arrays string for-loop


    【解决方案1】:

    如果字符串只有元音 i,o,u,则此代码有效,但如果它有 a,e,则输出将是错误的:

    • 这是因为当元音是 ae 时,j-V%5负数(因为,j 是 01正如你正确提到的.

      //when j=0 i.e, vowel `a`
      j-V%5 = 0-(2%5) = -2 //`%` has more priority over `-`
      
      //when j=1 i.e, vowel `e`
      j-V%5 = 1-(2%5) = -1
      
    • 只需使用(5 + j- (V % 5)) %5 来避免vow[] 数组的负索引值

      //when j=0 i.e, vowel `a`
      (5+j- (V%5))%5 = (5+0-(2%5))%5 = 3
      
      //when j=1 i.e, vowel `e`
      (5+j- (V%5))%5 = (5+1-(2%5))%5 = 4
      
      //when j=2 i.e, vowel `i`
      (5+j- (V%5))%5 = (5+2-(2%5))%5 = 0    
      
      //when j=3 i.e, vowel `o`
      (5+j- (V%5))%5 = (5+3-(2%5))%5 = 1
      
      //when j=4 i.e, vowel `u`
      (5+j- (V%5))%5 = (5+4-(2%5))%5 = 2
      

    这将帮助您避免对 vow[] 数组进行负索引


    另一种方法是,

    • 在给V赋值后,使V = (V % 5) + 5
    • 现在,您可以使用(V -j)%5 作为索引

    【讨论】:

    • 括号中应该是V%5,因为如果V=70,输出就会出错。还是我错了?
    • ya v%5 in the parenteses and then again %5
    • 我只是设置了 V=2 来修正这些想法,但它应该是一个通用数字
    【解决方案2】:

    我假设对于 a 和 e,你应该环绕所以 a->o 和 e->u

    改变这个

    j-V%5
    

    ((j-V%5) + 5) % 5
    

    示例

    V=2, j=1
    
    j-V%5 ---------------> -1
    (j-V%5) + 5 --------->  4
    ((j-V%5) + 5) % 5 --->  4
    
    Result:
    'e' --> 'u'
    

    【讨论】:

      猜你喜欢
      • 2012-07-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多