如何用纯C计算单词,字符和行的数量

时间:2016-12-17 05:38:07

标签: c

我想计算单词,字符,新行的数量,无论我的句子如何。 (例如,即使我输入了这样的句子:

y yafa \n \n youasf\n sd

程序仍然可以正确计算单词,行数,字符数)。我不知道如何用纯C实现这样的程序,有人可以帮我吗?

这是我当前的代码,它只能在某些条件下正确...

int main() {
    int cCount = 0, wCount = 0, lCount = 0;

    printf("Please enter the sentence you want\n");

    char str[20];
    int j7 = 0;

    while (int(str[j7]) != 4) {
        str[j7] = getchar();
        if (str[0] == ' ') {
            printf("Sentence starts from a word not blank\n");
            break;
        }
        if (int(str[j7]) == 4)
            break;
        j7++;
    }
    int count = 0;
    while (count < 20) {
        if (str[count] != ' ' && str[count] != '\n') {
            cCount++;
        } else
        if (str[count] == ' ') {
            wCount++;
        } else
        if (str[count] == '\n') {
            lCount++;
        }
        count++;
    }

    printf("Characters: %d\nWords: %d\nLines: %d\n\n",
           cCount, wCount++, lCount + 1);
    int x = 0;
    std::cin >> x;
}

1 个答案:

答案 0 :(得分:2)

您不是在 Pure C 中编写,而是在C ++中编写。

要实现目标,您必须将问题汇总为一系列逻辑步骤:

  • 为每个字符读取:
    • 如果前一个是行分隔符,则您有一个新行;
    • 如果前一个是单词分隔符且当前不是,则有一个新单词;
    • 如果所有情况都有一个新字符,请将其保存为下一次迭代的前一个字符。

使用'\n'作为last字符的初始值,因此第一个字符读取(如果有的话)会开始一个新行,如果不是空格则可能是新单词。

这是一个简单的实现:

#include <ctype.h>
#include <stdio.h>

int main(void) {
    long chars = 0, words = 0, lines = 0;

    printf("Enter the text:\n");

    for (int c, last = '\n'; (c = getchar()) != EOF; last = c) {
        chars++;
        if (last == '\n')
            lines++;
        if (isspace(last) && !isspace(c))
            words++;
    }
    printf("Characters: %ld\n"
           "Words: %ld\n"
           "Lines: %ld\n\n", chars, words, lines);
    return 0;
}

如果您需要使用while循环,可以通过以下方式转换for循环:

#include <ctype.h>
#include <stdio.h>

int main(void) {
    long chars = 0, words = 0, lines = 0;
    int c, last = '\n';

    printf("Enter the text:\n");

    while ((c = getchar()) != EOF) {
        chars++;
        if (last == '\n')
            lines++;
        if (isspace(last) && !isspace(c))
            words++;
        last = c;
    }
    printf("Characters: %ld\n"
           "Words: %ld\n"
           "Lines: %ld\n\n", chars, words, lines);
    return 0;
}