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函數:沒有指定輸入字符的大小,限制輸入緩衝區的大小,若是輸入的字符大於定義的數組長度,會發生內存越界,堆棧溢出。後果很是怕怕函數

 

修改代碼以下:spa

//計算字符串最後一個單詞的長度,單詞以空格隔開。
#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函數會指定大小,若是超出數組大小,會自動根據定義數組的長度截斷。code

還有一點,上面代碼中標紅部分blog

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

爲何i = (len -2)內存

由於fgets函數自己會把回車換行符存入了字符串裏。因此實際讀入的字符串會多一個回車換行符,故字符串

i=(len-2)
相關文章
相關標籤/搜索