密码翻译,A-Z,B-Y,等转换

哪里出错了

img


#include
int main()
{
    char a[26],b[26],c[15] = {0} ;
    int i,j;
    char m;
    for(i = 0,m = 'A';i<26;i++)
    {
        a[i] = m++;
    }
    for(i = 0,m = 'a';i<26;i++)
    {
        b[i] = m++;
    }
    gets(c);
    i = 0;
    while(c[i])
    {
        for(j = 0;j<26;j++)
        {
            if(c[i] == a[j])
            {
                c[i] = a[26-j+1];
            }
            else if(c[i] == b[j])
            {
                c[i] = b[26-j+1];
            }
        }
        i++;
    }
    printf("%s\n",c);
    return 0;
}

char a[26],b[26],c[15] = {'\0'} ;
这里只是将c[0]设置为{'\0'};
你的本意是3个数组都要设置为0
而且char也太小了

修改了四处看行不


#include<stdio.h>
int main()
{
    char a[26],b[26],c[15] = {'\0'} ;
    int i,j;
    char m;
    for(i = 0,m = 'A'; i<26; i++)
    {
        a[i] = m++;
    }
    for(i = 0,m = 'a'; i<26; i++)
    {
        b[i] = m++;
    }

    gets(c);
    i = 0;
    while(c[i]!='\0')//这里改了
    {
        for(j = 0; j<26; j++)
        {
            if(c[i] == a[j])
            {
                c[i] = a[25-j];//这里改了
            }
            else if(c[i] == b[j])
            {
                c[i] = b[25-j];//这里改了
            }
        }
        i++;
    }
    printf("%s\n",c);
    return 0;
}


您的问题有两个:

  1. c[i] = a[26-j+1];这里应该是26-j-1才能得到对应下标
  2. 在替换字符后,应该将内层循环break,否则随着循环进行,会再次进行反转
    正确代码:
#include <stdio.h>
int main()
{
    char a[30], b[30], c[15];
    int i, j;
    char m;
    for (i = 0, m = 'A'; i < 26; i++)
    {
        a[i] = m++;
    }
    for (i = 0, m = 'a'; i < 26; i++)
    {
        b[i] = m++;
    }
    gets(c);
    i = 0;
    while (c[i])
    {
        for (j = 0; j < 26; j++)
        {
            if (c[i] == a[j])
            {
                c[i] = a[25 - j];
                break;
            }
            else if (c[i] == b[j])
            {
                c[i] = b[25 - j];
                break;
            }
        }
        i++;
    }
    printf("%s\n", c);
    return 0;
}



不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^