题目要求如下:编写程序夹现加密算法。
加密方法:对给定的一个字符串,把其中从 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); // 修改
}
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以帮您解决这个问题。
以下是代码实现和解决方案:
#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函数的参数与调用时传递的参数类型和数量相同。