实验9 3161错在哪里

img


#include 
int main()
{
    char a[1024];
    scanf("%s",a);
    int l=ln(a);
    printf("%d\n",l);
    return 0;
}
int ln(char *s)
{
    int i=0;
    while(*s!='\0')
        s++;
    s--;
    while(*s!=' ')
    {
        i++;
        s--;
    }
    return i;
}

如果最后一个单词后面有空格,则这个代码会判断出错,另外如果是非字母字符也会判断出错,增加判断当从后往前计算长度时,从第一个字母字符开始.

 #include <stdio.h>
 #include <ctype.h>
 int ln(char *s)
{
    int i=0;
    while(*s!='\0')
        s++;
    s--;
    //printf("before,s=%s\n",s);
    
    // https://www.runoob.com/cprogramming/c-function-isalpha.html
    while(isalpha(*s)!=0)
    {
        s--;
    }
    
    while(*s!=' '){
        i++;
        s--;
    }
    
   // printf("end,s=%d\n",s); 
    return i;
}

int main()
{
    char a[1024];
   // scanf("%s",a);
   // https://baike.baidu.com/item/gets/787649?fr=aladdin
       gets(a);
    //printf("a=%s\n",a);
    
    int l=ln(a);
   // printf("%d\n",l);
    return 0;
}