问答题 下列给定程序中,函数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[j]="/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";”。