1. 程式人生 > >統計字串中每個單詞出現的次數 for C++

統計字串中每個單詞出現的次數 for C++

void CountWords(char str[])//實現字串中每個單詞出現的次數統計
{
    char S[20][10];//用於儲存每個單詞
    int Count[20];//用於統計每個單詞出現的次數
    int i=0,j=0,k=0;
    int Num;//表示單詞的個數
    int flag[20];//用於標誌單詞是否被統計過,統計過為0,未統計為1
    memset(flag,1,sizeof(flag));
    while(str[k]!='\0')//將每個單詞放入S的二維陣列中
    {
        while(str[k]==' '||str[k]=='.')//將單詞與單詞前的空格設為一個基本單位,這個迴圈用於刪除基本單位前的空格或者句號
        {
            k++;
        }
        while((str[k]<='z'&&str[k]>='a')||(str[k]<='Z'&&str[k]>='z'))//將字串儲存到二維陣列中,為了能很好的使用puts函式.
        {
            S[i][j]=str[k];
            j++;//指標向前移動一位
            k++;//str指標向前移動一位
        }
        S[i][j]='\0';//為了能很好的使用puts函式,我們需要在每個單詞的末尾加入一個'\0';
        i++;//S切換到下一行,當整個迴圈結束時i多計算了一位。
        j=0;//j置為0
    }
    Num=i-1;
    /*下面的迴圈用於統計每個單詞出現的次數*/
    for(i=0;i<=Num;i++)
    {
        Count[i]=1;//將每個count初始值設為1,因為每個單詞都算一次
    }
    for(i=0;i<Num;i++)
    {
        if(flag[i]==0)//這裡表示如果前面單詞已經被統計過了,我們就不再統計
        {
            goto SKIP;
        }
        for(j=i+1;j<=Num;j++)//進行數量統計,統計過的單詞,我們用flag標誌
        {
            if(strcmp(S[i],S[j])==0)
            {
                Count[i]++;
                flag[j]=0;
            }
        }
        SKIP:;
    }
    for(i=0;i<=Num;i++)//輸出
    {
        if(flag[i]!=0)
        {
            puts(S[i]);
            cout<<"number is : "<<Count[i]<<'\n'<<endl;
        }
    }
}