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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM