加密字符串

时间:2016-07-09 06:16:47

标签: c arrays string for-loop

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

如果我们有一个整数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,以便我不再在誓言中获得负数并且正确地尊重这些抄写规则? 请告诉我是否有事情不清楚,并提前感谢!!!

2 个答案:

答案 0 :(得分:1)

我认为对于a和e,你应该环绕所以a-&gt; o和e-&gt; 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'

答案 1 :(得分:1)

  

如果字符串只有元音i,o,u但是如果它有a,那么输出将是错误的:

  • 这是因为当元音为ae时,j-V%5 为负(因为,j为0或{ {1}})正如您正确提到的那样

    1
  • 只需使用//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[] make V 后,
  • 现在,您可以使用V = (V % 5) + 5作为索引