如何计算C中多行的单词?

时间:2014-10-29 18:24:04

标签: c

所以我有点卡住,计算空格不再有用,因为它总是留下一个单词不计算。我无法在1处开始变量,因为如果没有任何单词就会怎么样。

这是我目前的代码

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

int main(void){
    char ch;
    char character;
    char prvs;
    unsigned long int linecount = 0;
    unsigned long int charcount = 0;
    unsigned long int wordcount = 0;
    //int i = 0;

    while((character=getc(stdin)) != EOF){
        //char n[] ="\n";
        if(character== '\n'
            linecount += 1;
        /*
        if(character==' ' || character=='\n'){
            if(character=='\n'
                wordcount +=2;
            else
                wordcount += 1;
        }*/
        if(character != ' ' && prvs == ' ')
            wordcount += 1;
        charcount += 1;
        prvs = character;
    }//TEST
    printf("CHAR: %lu WORD: %lu LINE: %lu\n", charcount, wordcount, linecount );
    return 0;
}

这是我对其进行测试的文件

hello world
hi there
bye

这是我的输出

CHAR: 25 WORD: 2 LINE: 3

2 个答案:

答案 0 :(得分:0)

您应该使用:

    if(!isspace(character) && isspace(prvs)){

而不是

    if(character != ' ' && prvs == ' '){

这将计算在换行符之后开始计算的单词。它还将处理输入中存在的任何制表符。

您还必须添加逻辑来计算第一个单词。为此,您可以将prev初始化为:

char prev = '\0';

并更改行

    if(!isspace(character) && isspace(prvs)){

    if(!isspace(character) && (isspace(prvs) || prvs == '\0') ){

答案 1 :(得分:0)

以下代码适用于我:

    int atLeastOneChar = 0;
    prvs = '/n';
    while((character=getc(stdin)) != EOF)
    {

        if(character== '\n')
        {
            ++linecount;
            if((prvs != '\n') && (prvs != ' ')) ++wordcount;
        }

        if((character == ' ') && (prvs != ' ' ) && (prvs != '\n' ))
        {
            ++wordcount;
        }           
        if((character != ' ') && (character != '\n' ))
        {
            atLeastOneChar = 1;
        }           
        charcount += 1;
        prvs = character;

     }//TEST
     if((atLeastOneChar == 1) && (wordcount == 0)) ++wordcount;

     printf("CHAR: %lu WORD: %lu LINE: %lu\n", charcount, wordcount, linecount );