#include <stdio.h>
#include <string.h>
void main()
{
char alfavita[30] =
{
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z'
};
char str[20];
printf("Give a word:\n");
gets(str);
for(int i=0;i<strlen(str);i++)
{
for(int j=0;j<strlen(alfavita);j++)
if(alfavita[j] == str[i])
str[i] = alfavita[j+3];
}
puts(str);
}
例如,如果我给出“a”,它应该返回“d”(每个字母将转换为 alfavita 数组的 3d next),但它只打印一个空字符串。我找不到任何错误或者我没有看到它。
最佳答案
str[i] = alfavita[j+3];
在这一行之后,代码继续,因此它将放置 i+3、i+6...,直到它离开 alfavita。
您可以添加 break
来退出内部循环,如下所示:
for(int i=0;i<strlen(str);i++)
{
for(int j=0;j<strlen(alfavita);j++)
if(alfavita[j] == str[i])
{
str[i] = alfavita[j+3];
break; // next i.
}
}
,或者直接访问数组:
for(int i=0;i<strlen(str);i++)
{
char c = str[i];
if (c >= 'a' && c <= 'z') {
str[i] = alfavita[(c - 'a' + 3) % strlen(alfavita)];
}
}
注意% strlen(alfavita)
以避免在列表末尾之后结束。
你也可以这样写:
if (c >= 'a' && c <= 'z') {
str[i] = ((c - 'a' + 3) % 26) + 'a';
}
关于C 程序无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24014572/