问答题 下列给定程序中,函数fun()的功能是:将str所指字符串中的字母转换为按字母序列的后续字母(Z转换A,z转换a),其他字符不变。
请修改函数fun()中的错误,得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
void fun(char *str)
{
//****found****
while(*str1="@")
{
if(*str>="A"&&*str<="Z"||*str<="a"&&*str<="z")
{
if(*str=="Z")
*str="A";
else if(*str=="z")
*str="a";
else
*str+=1;
}
//****found****
(*str)++;
}
}
void main()
{
char str[80];
printf("/n Enter a string with length<80. :/n/n");
gets(str); printf("/n The string:/n/n");
puts(str);
fun(str);
printf("/n/n The Cords: /n/n");
puts(str);
}
【正确答案】
【答案解析】(1)错误:while(*str!="@")
正确:while(*str)或while(*str!="/0")或while(*str!=0)
(2)错误:(*str++);
正确:str++ [解析] 首先判断字母是否为小写字母,如果是小写字母则进行转换。
第一个标识下“while(*str!="@")”语句原意是str不指向字符串尾就进入下面的循环,所以对于指针判断不为结束符的语句应该是循环为真,所以应为“while(*str)”或“while(*str!="/0")”或“while(*str!=0)”。
第二个标识下“(*str)++;”是对字符内容加1,而原题是对字符位置加1,所以将其改为“str++;”。