C語言不同單詞個數統計

寫在前面:這裏是小王成長日誌,一名在校大學生,想在學習之餘將自己的學習筆記分享出來,記錄自己的成長軌跡,幫助可能需要的人。歡迎關注與留言。

題目:

題目鏈接:https://www.dotcpp.com/oj/problem1487.html

題目 1487: [藍橋杯][算法提高VIP]不同單詞個數統計

時間限制: 1Sec 內存限制: 128MB 提交: 1988 解決: 841

題目描述
編寫一個程序,輸入一個句子,然後統計出這個句子當中不同的單詞個數。例如:對於句子“one little two little three little boys”,總共有5個不同的單詞:one, little, two, three, boys。
說明:(1)由於句子當中包含有空格,所以應該用gets函數來輸入這個句子;(2)輸入的句子當中只包含英文字符和空格,單詞之間用一個空格隔開;(3)不用考慮單詞的大小寫,假設輸入的都是小寫字符;(4)句子長度不超過100個字符。
輸入
輸入只有一行,即一個英文句子。
輸出
輸出只有一行,是一個整數,表示句子中不同單詞的個數。
樣例輸入
one little two little three little boys
樣例輸出
5

C語言解法

注意:題目沒說單詞之間是一個空格,事實上,他給的就是兩個空格

題目明顯分爲輸入和處理兩部分,我們分開來看

接收輸入方法1,最簡單也最取巧:

	char a[50][20];
	while (~scanf("%s", a[j++]))
        ;
    //注:單詞個數即爲j

接收輸入方法2,需要注意k=-1和多個空格兩個注意點:

	char a[50][20], buffer[101] = "\0";
    gets(buffer);
    // 遍歷buffer字符串 取出單詞存入數組a中
    for (i = 0; i < len; i++, k++)
        if (buffer[i] != ' ') //
            a[j][k] = buffer[i];
        else if (a[j][k + 1] != ' ')//注意可能不止一個空格
        {
            a[j][k] = '\0';
            j++, k = -1; //行數加1 列數歸爲-1 因爲k++會從-1置爲0}
        }

//注:最後單詞個數爲j+1

接收輸入方法3,方法2的另一種寫法

	char a[50][20], buffer[101] = "\0";
    gets(buffer);
    for (i = 0; i < len; i++)
    {
        if (buffer[i] != ' ')
            a[j][k++] = buffer[i];
        if (buffer[i] != ' ' && (buffer[i + 1] == ' ' || buffer[i + 1] == '\0'))
        {
            a[j][k] = '\0';
            j++, k = 0; //行數加1 列數歸0
        }
    }

處理部分,尋找句子中不同單詞並計數

    int new_len = 0, flag;
    char arr[j][20];
    for (i = 0; i < j; i++)//j是輸入的單詞個數,可能需要根據前面的寫法微調
    {
        flag = 1; //默認是獨特不重複的一個單詞
        for (k = 0; k < new_len; k++)
            if (strcmp(a[i], arr[k]) == 0)
            {
                flag = 0;//找到一樣的單詞則置爲0
                break;
            }
        if (flag == 1)
            strcpy(arr[new_len++], a[i]);
    }

    printf("%d", new_len);

都看到這裏了,各位哥哥姐姐叔叔阿姨給小王點個贊 關個注 留個言吧,和小王一起成長吧,你們的關注是對我最大的支持。
有事沒事進來看看吧 : 小王的博客目錄索引
C語言專欄看這 : C語言學習專欄


如果以上內容有任何不準確或遺漏之處,或者你有更好的意見,就在下面留個言讓我知道吧-我會盡我所能來回答。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章