File I/O C语言的字数统计程序

File I/O word count program in C

我知道已经有几个关于这个主题的问题,但似乎这些问题要么没有得到完全回答,要么很难应用到我的代码中,所以如果这是重复的,我深表歉意。 我在整个 I/O 程序中遇到了以下功能的问题,该程序还进行字数和行数计数(那些工作)。 char* 文件名是从命令行中提取的。在这个例子中,它是从一个带有 lorum ipsum 的 txt 文件中提取的。 (69 个字)理论上,下面的函数应该从文件名中读取并将其写入数组。然后读取该数组并检查当前字符是否为 space ' ' 而下一个字符不是。目前 returns 0 无论如何。

int wordcount(char* filename) {
int wc=0,i=0,z=0;
char w, test[1000];
FILE *fp;
fp = fopen(filename, "r");
        while (feof(fp) == 0) {
                fscanf(fp, "%c", &test[i]);
                        i++;
        }
        while (z>i-1) {
                if (test[z] = ' ' && test[z+1] != ' ' ) {

                wc++;z++;
        }
        }
return wc;
}

注意:我知道声明一个 1000 字符数组的效率非常低,但我不确定该怎么做。如果您有任何改进或其他方法来实现这一点,如果您分享,我们将不胜感激。另外,我知道这目前忽略了其他类型的白色space,但我只是先测试一下,之后会扩展。

感谢您的帮助。

为什么总是得到0字的具体问题:

while (z>i-1) {

z 永远不会大于 i-1。可能您打算在 z 小于 i-1 时循环:

while (z<i-1) {

此外,当您找到一个单词时,您只会递增 z。你应该为你测试的每个字符增加它,不管它是否是 space。

有一个示例函数可以满足您的需要。对您的代码的一些建议,当您不再需要该文件时,fopen() 必须跟在 fclose() 之后。始终检查由 fopen 编辑的指针 return 是否不为 NULL,在这种情况下什么也不做,只是 return 错误代码。可以通过 space 字符后跟非 space 字符安全地检测新词的存在,在这种情况下递增世界计数 ++wc。使用 getc() 从文件对象中读取一个字符,并使用 isspace() 函数检查该字符是否为 space 字符。如果在 worldcount 运行.

期间没有人修改该文件,则不需要数组来存储该文件
int wordcount(const char* filename)
{
    int wc=0;
    char c;
    FILE *fp;

    fp = fopen(filename, "r");
    if(fp == NULL)
    {
        return -1;
    }

    bool previsspace = 1;
    while ((c=getc(fp)) != EOF)
    {
        if (isspace(c)==0 && (previsspace==1))  ++wc;
        previsspace = isspace(c);
    }
    fclose(fp);
    return wc;
};

您将需要以下包含文件:

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