输入一个以回车结束的字符串(少于80个字符),将其中的大写字母用下面列出的对应大写字母替换

【问题描述】输入一个以回车结束的字符串(少于80个字符),将其中的大写字母用下面列出的对应大写字母替换,其余字符不变,输出替换后的字符串

A-->Z B-->Y C-->X
.........................X-->C Y-->B
Z-->A
【输入形式】
【输出形式】
【样例输入】A flag of
USA
【样例输出】Z flag of FHZ

我的是这样的
#include "stdio.h"
#include "string.h"
#define MAX 80
int main()
{
char ch;
int str[MAX];
int i;
getchar();
i=0;
while((ch=getchar())!='\n')
{
str[i]=ch;
i++;
}
str[i]='\0';
for(i=0;str[i]!='\0';i++)
{
if((str[i]>='A'&&str[i]<='Z'))
str[i]='A'+'Z'-str[i];
}
for(i=0;str[i]!='\0';i++)
printf("%c",str[i]);
return 0;
}
但是为什么第一个字符无法输入呢。。
比如输入AAA,结果最后出来的只有ZZ。
求大神指点!!

因为getchar();这条语句,已经把第一个字符吸收了,并且没有一个变量来接受它,所以它就被忽略了,并没有存储到str[]这个数组中。而后面while((ch=getchar())!='\n')这条语句ch接收的已经是第二个字符了,然后存储到str[]中。所以str[]中就没有第一个字符了。你可以去掉getchar()这条语句再调试一下就正确了。代码如下:
#include<stdio.h>
#include<string.h>
#define MAX 80
int main(){
char ch;
char str[MAX];
int i=0;
while((ch=getchar())!='\n')
{ str[i]=ch;
i++; }
str[i]='\0';
for(i=0;str[i]!='\0';i++) {
if((str[i]>='A'&&str[i]<='Z'))
str[i]='A'+'Z'-str[i]; }
for(i=0;str[i]!='\0';i++)
printf("%c",str[i]);
return 0;}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-26
第4行回车好像不要吧,
记得吃回车是在不同的样例之间才要吃回车
按照你的程序的话不用另外加吃回车的getchar

ps :望采纳哦,亲本回答被提问者采纳
第2个回答  2013-05-26
因为输入的第一个字符被你第一句“getchar();”(main()函数第4行)“吃掉”了。去掉这一句就行。
相似回答