凯撒的C密码

时间:2015-03-23 18:19:05

标签: c caesar-cipher

我正在尝试执行一个程序,它接收一个字符数组作为输入,每个字母都被另一个字母替换。在下面的代码中,我只考虑一个更改('a' - >'h'),但只要程序适用于该更改,我将实现其他更改(例如,基于Caesar的Cipher)。 问题是程序编译成功,但是,当我运行它时,如果我插入'a',他返回另一个'a'(它应该返回'h')。 代码有什么问题? 提前致谢。

#include <stdio.h>

void ciphering (char text[])
{
    int i;

    for (i=0; i!='\0'; i++)
    {
         if (text[i]>='a' && text[i]<='z')
         {
                  if (text[i]=='a')
                      text[i]='h';
         }
    }
}

int main()
{
    char text[1000];

    scanf("%s", text);
    ciphering(text);
    printf("%s\n", text);
    return 0;
}

3 个答案:

答案 0 :(得分:1)

函数中的for循环有

for(i = 0; i != '\0'; ++i)
           ^^^^^^^^^

将其更改为:

for(i = 0; text[i] != '\0'; ++i)

因为您要检查text[i]何时有NUL个字符。

答案 1 :(得分:1)

在for循环(以及许多其他上下文)的上下文中,

0'\0'是相同的。

for(i = 0; i != '\0'; ++i)

我把它读作:“对于我来自零而它不同于零...”这实际上意味着循环不会一次运行。

答案 2 :(得分:0)

程序没有进入for()循环,因为延续条件为false:

for (i = 0; i != '\0'; i ++) {

您需要测试的是i(当前分析的字符的索引)不指向空字符。该行应为:

for (i = 0; text[i] != '\0'; i ++) {