改错题
1. 下列给定程序中,函数proc()的功能是:依次取出字符串中所有的字母字符,形成新的字符串,并取代原字符串。
例如,若输入“ab232bd34bkw”,则输出“abbdbkw”。
请修改程序中的错误,使它能得到正确结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
void proc(char*str)
{
int i,j;
for(i=0,j=0; str[i]!='\0'; i++)
//****found****
if((str[i]>='A'&&str[i]<='Z')&&(str[i]>='a'
&&str[i]<='z'))
str[j++]=str[i];
//****found****
str[j]="\0";
}
void main()
{
char item[80];
system("CLS");
printf("\nEnter a string:");
gets(item);
printf("\n\nThe string is:%s\n",item);
proc(item);
printf("\n\nThe string of changing is:%s\n",item);
}
【正确答案】(1)错误:if((s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&s[i]<='z'))
正确:if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))
(2)错误:stri[i]="\0";
正确:stri[j]='\0';
【答案解析】 判断一个字符是否是字母字符,只要这个字符符合大写字母或小写字母的其中一种情况即可,因此,“if((s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&s[i]<='z'))”应改为“if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))”;在程序的最后要为新的字符串加上结束符,在C语言中,字符串的结束符为'\0',因此,“s[j]="\0";”应改为“s[j]='\0';”。