C语言简单的加密字符串

题目要求如下:编写程序夹现加密算法。
加密方法:对给定的一个字符串,把其中从 a-y,A-Y 的字母用其后继字母替代把z和Z用a和A替代,其他非字母字符不变,则可得到一个简单的加密字符串。
要求定义 encode 函数,在encode 函数中实现加密,并在主函数中输出加密后的字符串。
输入:一行字符串,长度小于 80个字符。
输出:加密字符串。
我的代码报错显示s2=encode(s1,m);这一行有误,不能定义成str2[80]吗?

#include <stdio.h>
#include <string.h>
char encode(char a[],int b)
{int i;
char c;
for(i=0;i<b;i++)
{c=a[i];
if((a[i]>='a'&&a[i]<'z')||(a[i]>='A'&&a[i]<'Z'))
{a[i]=c+1;
}
else if(a[i]=='z'||a[i]=='Z')
{a[i]=c-32;
}
}
}
int main()
{char s1[80],s2[80];
int m;
gets(s1);
m=strlen(s1);
s2=encode(s1,m);
puts(s2);
}  

修改如下,改动处见注释,供参考:

#include <stdio.h>
#include <string.h>
void encode(char a[],int b)  //char 修改
{
    int i;
    char c;
    for(i=0;i<b;i++)
    {
        c=a[i];
        if((a[i]>='a'&&a[i]<'z')||(a[i]>='A'&&a[i]<'Z'))
        {
            a[i]=c+1;
        }
        else if(a[i]=='z'||a[i]=='Z')
        {
            a[i]=c-25; // a[i]=c-32; // 修改
        }
    }
}
int main()
{
    char s1[80],s2[80];
    int m;
    gets(s1);
    m=strlen(s1);
    encode(s1,m); //s2=encode(s1,m); 修改
    puts(s1);    // 修改
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    我可以帮您解决这个问题。

    以下是代码实现和解决方案:

    #include <stdio.h>
    #include <string.h>
    
    void encode(char str1[], char str2[]) {
        int i = 0;
        while (str1[i] != '\0') {
            if ((str1[i] >= 'a' && str1[i] < 'z') || (str1[i] >= 'A' && str1[i] < 'Z')) {
                str2[i] = str1[i] + 1;
            } else if (str1[i] == 'z') {
                str2[i] = 'a';
            } else if (str1[i] == 'Z') {
                str2[i] = 'A';
            } else {
                str2[i] = str1[i];
            }
            i++;
        }
        str2[i] = '\0'; // 填充字符串结束标志符
    }
    
    int main() {
        char str1[80], str2[80];
        printf("请输入要加密的字符串:");
        scanf("%s", str1);
        encode(str1, str2);
        printf("加密后的字符串为:%s\n", str2);
        return 0;
    }
    

    在这个代码中,我们定义了一个encode函数,该函数接受两个字符串参数,分别是要加密的字符串和加密后保存的字符串。该函数会对原始字符串进行遍历,当遇到字母时,将其加密为其后继字母,当遇到z或Z时,将其加密为a或A,其他情况不做处理。遍历完成后,将加密后的字符串保存到str2中,并在其末尾添加字符串结束标志符'\0'。最后在主函数中,接收原始字符串的输入,调用encode函数进行加密,并输出加密后的字符串。

    至于定义s2为str2[80]时出现的错误,很可能是因为在调用encode函数时,传递的参数不匹配。请确保encode函数的参数与调用时传递的参数类型和数量相同。


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