C 程序无法正常运行

标签 c alphabet

#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/

相关文章:

android - 如何在android中实现字母滚动条

javascript - 仍然无法正常工作 - 功能 : letter to next letter(i. e。 a->b) 并将元音大写

c - 如何在宾果游戏中避免 TLE?

c - 内存 C 中的 IP 查找表

c - 使用键盘中断显示与用户键入内容不同的内容

Python string.letters 不包括语言环境变音符号

c - 错误 : expression must have a constant value

c - 如何在数组中插入不重复的元素?

python - 无法将 'list' 对象隐式转换为 str Python

python - 有没有一种快速的方法可以在 Python 中生成字母表的字典?