密码翻译

liangkaiyu 2009-02-21 10:38:33
Description
在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别.我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,则可得到一个简单的加密字符串.
Input
第一行是字符串的数目n, (也要使用get(s)读取字符串,再用n=atoi(s)获得整数数值).
其余n行每行一个字符串,用gets(s)方式读取这一行字符串.每个字符串长度小于80个字符.
Output
输出每行字符串的加密字符串.

好心的帮我指正下
#include "stdio.h"
#include "string.h"
int main(){
char a[1000][100], b[1000][100];
int n, i, j;

scanf("%d",&n);

for (i = 0; i < n; i++)
gets(a[i]);

for (i = 0; i < n; i++)
{
j = 0;
while(a[i][j] != '\0')
{
if (a[i][j] >= 'A' && a[i][j] < 'Z' || a[i][j] >= 'a' && a[i][j] < 'z')
{
b[i][j] = a[1000][100] + 1;
}
else if(a[i][j] == 'Z')
b[i][j] = 'A';
else if (a[i][j] == 'z')
{
b[i][j] = 'a';
}
}
printf("%s", b[i]);
printf("\n");
}

return 0;
}


...全文
1677 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxbwelcome 2009-02-21
  • 打赏
  • 举报
回复
这样接收输入就好了
scanf("%d\n",&n);
sxbwelcome 2009-02-21
  • 打赏
  • 举报
回复
象这样性质的问题,最好用单步调式的方式运行
一步步的看结果,很容易找出逻辑错误,这可是屡试不爽的法宝
sxbwelcome 2009-02-21
  • 打赏
  • 举报
回复
应该是接收n的值时,接收了一个回车
所以你看到的第一个字符串为空
liangkaiyu 2009-02-21
  • 打赏
  • 举报
回复
还有一个问题弄不明白
测试时发现
实际上测试的个数比一开始输入测试的个数少1?
问题出在哪里?
liangkaiyu 2009-02-21
  • 打赏
  • 举报
回复
犯了这么低级的错误
令人汗颜
sxbwelcome 2009-02-21
  • 打赏
  • 举报
回复
两个关键错误
以红色标记出来的

for (i = 0; i < n; i++)
{
j = 0;
while(a[i][j] != '\0')
{
if (a[i][j] >= 'A' && a[i][j] < 'Z' || a[i][j] >= 'a' && a[i][j] < 'z')
b[i][j] = a[i][j] + 1;

else if(a[i][j] == 'Z') b[i][j] = 'A';
else if (a[i][j] == 'z') b[i][j] = 'a';
j++;
}
b[i][j]='\0';//记得加结束符啊
printf("%s", b[i]);
printf("\n");
}
waizqfor 2009-02-21
  • 打赏
  • 举报
回复

b[i][j] = a[1000][100] + 1;//LZ这句什么意思呢 后续字母吗?

happytang 2009-02-21
  • 打赏
  • 举报
回复
b[i][j] = a[1000][100] + 1;
//什么意思

另外你这里面后继字母指的是字母本身的下一个,比如b后面是c;还是字符串中下一个字母
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "string.h"
是标准头文件,最好改成
#include <stdio.h>
#include <string.h>


liangkaiyu 2009-02-21
  • 打赏
  • 举报
回复

无论如何
AC就好了
最终程序:
#include "stdio.h"
#include "string.h"

int main(){
char a[1000][100], b[1000][100];
int n, i, j;

scanf("%d\n",&n);

for (i = 0; i < n; i++)
gets(a[i]);

for (i = 0; i < n; i++)
{
j = 0;
while(a[i][j] != '\0')
{
if (a[i][j] >= 'A' && a[i][j] < 'Z' || a[i][j] >= 'a' && a[i][j] < 'z')
b[i][j] = a[i][j] + 1;

else if(a[i][j] == 'Z') b[i][j] = 'A';
else if (a[i][j] == 'z') b[i][j] = 'a';
else
b[i][j] = a[i][j];
j++;
}
b[i][j]='\0';
printf("%s", b[i]);
printf("\n");
}

return 0;
}

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧