标题:大家新年好,我有点小问题了。统计单词个数的
只看楼主
yxiangyxiang
Rank: 3Rank: 3
来 自:/\/\/\/\/
等 级:论坛游侠
帖 子:130
专家分:186
注 册:2012-1-29
得分:0 
回复 29楼 TonyDeng
如何跳出循环?
2012-02-07 23:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你試試看

授人以渔,不授人以鱼。
2012-02-07 23:53
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
得分:0 
以下是引用TonyDeng在2012-2-7 23:40:20的发言:

你這樣做:scanf("%s", str)這個語句,一定是每次讀入一個單詞的,不會有空格之類空白字符,也就是說,不管有多少空格、TAB之類字符,全部略過,所以計數就計算這個函數返回1的次數即可(用fscanf()統計一個文本文件的單詞數,用這個是最方便的,不用考慮回車換行,一直讀到feof()就是了)。大致的代碼如下:

counter = 0
while (scanf("%s", str) > 0)
{
    ++counter;
}
循環結束後,counter就是所需要的答案。具體你自己嘗試一下。
思路很好,不过我搞了半天没搞出来,明天有面试,不搞了,休息了噢

认为事物非黑即白是缺智慧的表现……
2012-02-08 00:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#include <conio.h>

void main(void)
{
    bool finish = false;

    printf_s("請輸入語句(以句號.作為結束符): ");
    int counter = 0;
    while (!finish)
    {
        char word[11];                                     // 應根據實際情況設置為能容納最大長度的單詞容量
        scanf_s("%s", word, sizeof(word) - 1);             // 這種輸入方法,容許任意輸入,不限文章長度、不限按鍵,只認約定結束符
        // 從這個步驟開始,可以考慮排除指定的標點符號
        char* p = strchr(word, '.');    
        if (p != NULL)                                     // 此下兩個if語句刻意寫成邏輯判斷形式,目的是強制結果為布爾類型
        {
            *p = '\0';
            finish = true;
        }
        if (strlen(word) > 0)
        {
            ++counter;
            printf_s("%s\n", word);                        // 驗證提取的單詞,可省
        }
    }
    printf_s("單詞數: %d\n", counter);

    printf_s("\n按任意鍵結束程序……");
    _getch();
}


[ 本帖最后由 TonyDeng 于 2012-2-8 02:45 编辑 ]

授人以渔,不授人以鱼。
2012-02-08 02:21
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
得分:0 
回复 28楼 a271885843
啊啊啊,不好意思额。。。我也是寒假才学的c,这方面不太清楚额。多交流多交流。。。

数学好难!
2012-02-08 14:30
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
得分:0 
回复 26楼 a271885843
楼主莫急,想骂就骂吧哈,至于你说的阴阳怪气,虽然是网络哈,起码尊重还是要有。气度大,程度才大。接触的朋友环境不一样,自然会有所差别。望一路走好。

数学好难!
2012-02-08 14:34
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
得分:0 
以下是引用TonyDeng在2012-2-8 02:21:59的发言:

#include  
#include  
#include  
 
void main(void)
{
    bool finish = false;
 
    printf_s("請輸入語句(以句號.作為結束符): ");
    int counter = 0;
    while (!finish)
    {
        char word[11];                                     // 應根據實際情況設置為能容納最大長度的單詞容量
        scanf_s("%s", word, sizeof(word) - 1);             // 這種輸入方法,容許任意輸入,不限文章長度、不限按鍵,只認約定結束符
        // 從這個步驟開始,可以考慮排除指定的標點符號
        char* p = strchr(word, '.');     
        if (p != NULL)                                     // 此下兩個if語句刻意寫成邏輯判斷形式,目的是強制結果為布爾類型
        {
            *p = '\0';
            finish = true;
        }
        if (strlen(word) > 0)
        {
            ++counter;
            printf_s("%s\n", word);                        // 驗證提取的單詞,可省
        }
    }
    printf_s("單詞數: %d\n", counter);
 
    printf_s("\n按任意鍵結束程序……");
    _getch();
}
看明白了,每次scanf_s只读取第一个空格之前的单词,然后只要结束符.没出现,第一个if不起作用,然后又循环,scanf_s再次读取字符串中第二个单词........

认为事物非黑即白是缺智慧的表现……
2012-02-08 23:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
對,是的。

授人以渔,不授人以鱼。
2012-02-08 23:11
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
得分:0 
以下是引用TonyDeng在2012-2-8 23:11:07的发言:

對,是的。
刚开始以为是算法,原来scanf_s是c++里的,然后纠结scanf_s是怎么读完一个单词,即便是标志finish还是flase,结果想了想,应该是scanf_s读内存里的去了,这样一想就通了。感谢之,呵呵。

认为事物非黑即白是缺智慧的表现……
2012-02-08 23:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
scanf_s()是C語言scanf()的安全版本函數(s是safe的首字母,即“安全的”),其實就是scanf(),後面加的參數只是制約讀入的字符數目不至於超過數組容量溢出罷了,你把它看成scanf()就可以,不過最好習慣使用這個函數,因為溢出太可怕了(這個函數會觸發錯誤處理機制,讓你有機會挽回,而scanf()是直接崩潰的)。

scanf()函數讀字符串的特性,一向如此,刪掉空格,只讀入無空格的一個單元串,充分利用這點特性。在C++中,同樣特性的是<<輸入符。


[ 本帖最后由 TonyDeng 于 2012-2-8 23:31 编辑 ]

授人以渔,不授人以鱼。
2012-02-08 23:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360549-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.213856 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved