计算C中的行,数字和字符

时间:2014-08-28 21:43:29

标签: c

我是C的新手,今天我得到了一项任务,要求我从文件中读取文本,计算行数,字符数和单词数,然后以特定格式返回。

为了清楚 - 我需要阅读这个文本文件:

"I must not fear.
Fear is the mind-killer.
Fear is the little-death that brings total obliteration.
I will face my fear.
I will permit it to pass over me and through me.
And when it has gone past I will turn the inner eye to see its path.
Where the fear has gone there will be nothing... only I will remain"
  Litany Against Fear, Dune by Frank Herbert

并输出如下:

1)"I must not fear.[4,17]
2)Fear is the mind-killer.[4,24]
3)Fear is the little-death that brings total obliteration.[8,56]
4)I will face my fear.[5,20]
5)I will permit it to pass over me and through me.[11,48]
6)And when it has gone past I will turn the inner eye to see its path.[16,68]
7)Where the fear has gone there will be nothing... only I will remain"[13,68]
8)      Litany Against Fear, Dune by Frank Herbert[7,48]

现在,我写了一些接受文件的内容,它正确地计算了行数,但我有两个主要问题 - 1.如何从文件中获取文本以显示在输出中?我根本无法做到这一点。我的字数根本不起作用,我的字符数也没有。你能帮忙吗?

#include <stdio.h>

#define IN 1
#define OUT 0

void main()
{
    int numChars = 0;
    int numWords = 0;
    int numLines = 0;
    int state = 0;
    int test = 0;

    FILE *doesthiswork;

    doesthiswork = fopen("testWords.in", "r");
    state = OUT;

    while ((test = fgetc(doesthiswork)) != EOF) 
    {
        ++numChars;
        if ( test == '\n') 
        {
            ++numLines;
            if (test == ' ' || test == '\t' || test == '\n')
            {      
                state = OUT;
            } 
            else if (state == OUT)
            {
                state = IN;
                ++numWords;
            }

         }
         printf("%d) I NEED TEXT HERE. [%d %d]\n",numLines, numWords, numChars);
     }

}

2 个答案:

答案 0 :(得分:2)

  1. 如果您使用 getline()函数从文件中读取每一行,会更好。

  2. 使用 strtok()函数读取行处理后。通过这个,您将获得该行中的单词数并将其保存在变量中。

  3. 然后处理每个变量并获得字符数。

  4. 输出行号,单词数和字符数。

  5. 然后读另一行等等。

答案 1 :(得分:0)

  1. 如何让文件中的文字显示在输出中?
    它应该通过准备缓冲区存储在那里。

  2. 我的字数根本不起作用,我的字符数也是关闭的。
    测试错误的顺序。

  3. 像这样解决:

    #include <stdio.h>
    
    #define IN  1
    #define OUT 0
    
    int main(){
        int numChars = 0;
        int numWords = 0;
        int numLines = 0;
        int state = OUT;
        int test;
        char buffer[1024];
        int buff_pos = 0;
        FILE *doesthiswork;
    
        doesthiswork = fopen("data.txt", "r");
        state = OUT;
    
        while((test = fgetc(doesthiswork)) != EOF) {
            ++numChars;
            buffer[buff_pos++] = test;
            if(test == ' ' || test == '\t' || test == '\n'){
                state = OUT;
                if(test == '\n') {
                    ++numLines;
                    --numChars;//no count newline
                    buffer[--buff_pos] = '\0';//rewrite newline
                    printf("%d)%s[%d,%d]\n", numLines, buffer, numWords, numChars);
                    buff_pos = 0;
                    numWords = numChars = 0;
                }
             } else {
                if(state == OUT){
                    state = IN;
                    ++numWords;
                }
             }
        }
        fclose(doesthiswork);
        if(buff_pos != 0){//Input remains in the buffer.
            ++numLines;
            buffer[buff_pos] = '\0';
            printf("%d)%s[%d,%d]\n", numLines, buffer, numWords, numChars);
        }
        return 0;
    }