改错题 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';”。