C语言实现计算字符串中最后一个单词长度,单词以空格隔开

计算字符串中最后一个单词长度,单词以空格隔开

//计算字符串最后一个单词的长度,单词以空格隔开。
#include<stdio.h>
#include<string.h>

int main()
{
    char str[5000];
    gets(str);
    int count=0;
    int len=strlen(str);
    for(int i=(len-1);i>=0;i--)
    {
        if(str[i]!=' ')
        {
            count++;
        }
        else
        {
            break;
        }    
    }
    printf("%d\n",count); return 0;
}

此代码虽然能运行,但是此函数有一个bug,gets函数:没有指定输入字符的大小,限制输入缓冲区的大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常怕怕

 

修改代码如下:

//计算字符串最后一个单词的长度,单词以空格隔开。
#include<stdio.h>
#include<string.h>

int main()
{
    char str[5000];
    fgets(str,5000,stdin);
    int count=0;
    int len=strlen(str);
    for(int i=(len-2);i>=0;i--)
    {
        if(str[i]!=' ')
        {
            count++;
        }
        else
        {
            break;
        }    
    }
    printf("%d\n",count);     
    
    return 0;
}

fgets函数会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。

还有一点,上面代码中标红部分

 for(int i=(len-2);i>=0;i--) 

为什么i = (len -2)

因为fgets函数本身会把回车换行符存入了字符串里。所以实际读入的字符串会多一个回车换行符,故

i=(len-2)

 

posted @ 2018-09-09 20:44  Liu_Jing  Views(2365)  Comments(0Edit  收藏  举报