簡體   English   中英

不將空格視為c中的單詞

[英]Not counting spaces as words in c

#include <stdlib.h>
#include <stdio.h>

int main()
{
    unsigned long c;
    unsigned long line;
    unsigned long word;
    char ch;

    c = 0;
    line = 0;
    word = 0;

    while((ch = getchar()) != EOF)
    {
        c ++;
        if (ch == '\n')
        {
            line ++;
        }
        if (ch == ' ' || ch == '\n' || ch =='\'')
        {
            word ++;
        }
    }
    printf( "%lu %lu %lu\n", c, word, line );
    return 0;
}

我的程序在大多數情況下都能正常工作,但是當我添加額外的空格時,它將空格視為額外的單詞。 例如

How      are       you?
被算作10個字,但我希望它算作3個字。 如何修改我的代碼以使其正常工作?

我發現了一種計數單詞的方法,程序在它們之間的幾個空格將僅計數單詞,而不計數幾個空格,因為單詞是代碼:

nbword是單詞數, c是鍵入的字符, prvc是先前鍵入的字符。

#include <stdio.h>

int main()
{
    int nbword = 1;
    char c, prvc = 0;

    while((c = getchar()) != EOF)
    {
        if(c == ' ')
        {
            nbword++;
        }
        if(c == prvc && prvc == ' ')
            nbword-;
        if(c == '\n')
        {
            printf("%d\n", nbword);
            nbword = 1:
        }
        prvc = c;
    }
    return 0:
}

這是一種可能的解決方案:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    unsigned long c;
    unsigned long line;
    unsigned long word;
    char ch;
    char lastch = -1;

    c = 0;
    line = 0;
    word = 0;

    while((ch = getchar()) != EOF)
    {
        c ++;
        if (ch == '\n')
        {
            line ++;
        }
        if (ch == ' ' || ch == '\n' || ch =='\'')
        {
            if (!(lastch == ' ' && ch == ' '))
            {
                word ++;
            }
        }
        lastch = ch;
    }
    printf( "%lu %lu %lu\n", c, word, line );
    return 0;
}

希望這有幫助,祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM