C语言编程 大小写转换 纠错

来源:百度知道 编辑:UC知道 时间:2024/06/22 10:55:59
题目:
输入一串符号(长度不超过500个符号),将其中的大写英文字母变换成小写字母,将其中的小写字母变换成大写字母,其余符号(包括空格符)统一用加号 + 替换。例如 He is 15 years old 变换成 hE+IS++++YEARS+OLD

我的代码:
#include<stdio.h>
void main()
{
char x[600],a;
int i;
for(i=0;(x[i]=getchar())!='\n';i++);
i=0;
do
{
if(x[i]>='a'&&x[i]<='z')
printf("%c",x[i]-32);
else if(x[i]>='A'&&x[i]<='Z')
printf("%c",x[i]+32);
else
printf("+");
i++;
}while(x[i+1]!='\0');
}

结果有问题,最后一个字母之后总会有一个多余的'+'号……
Different: Different at line 1.
Std: 'aBCdERF++++++++++KJHKHIHyhgtLbuJYtghiuhgiuHIIGIUGiguIHGIhIHiuUYT+t+++++ok+L+L'
Out: 'aBCdERF++++++++++KJHKHIHyhgtLbuJYtghiuhgiuHIIGIUGiguIHGIhIHiuUYT+t+++++ok+L+L+'

Input of in case 4:
AbcDerf8964*&^^<>kjhkhihYHGTlBUjyTGHIUHGIUhiigiugIGUihgiHihIUuyt^T&65&^OK:l;l
回hem

#include<stdio.h>
void main()
{
char x[600],a;
int i;
gets(x);
i=0;
do
{
if(x[i]>='a'&&x[i]<='z')
printf("%c",x[i]-32);
else if(x[i]>='A'&&x[i]<='Z')
printf("%c",x[i]+32);
else
printf("+");
i++;
}while(x[i]!='\0');
}

估计是DOS/WINDOWS换行符的问题。
一般UNIX系统换行符是0x0a,也就是'\n',windows则是0x0d和0x0a两个字符,也就是'\r'和'\n',所以程序里除了判断'\n'之外还要判断'\r'。

getchar()是把回车键也读入的,然后赋值给x[i];
你把循环for(i=0;(x[i]=getchar())!='\n';i++);改成gets(x)就行了,因为gets会自动把\n转成\0,
你非要用你的方法就输入完后,求出字串长度,并把长度-1的值为'\0'就行.
len=strlen(x);
x[len-1]='\0';

//---------------------------------------------------------------------------

#include<stdio.h>
void main()
{
char x[600],a;
i