簡體   English   中英

C中的文件I/O字數統計程序

[英]File I/O word count program in C

我知道已經有幾個關於這個主題的問題,但似乎這些問題要么沒有完全回答,要么很難應用於我的代碼,所以如果這是重復的話,我深表歉意。 我在整體 I/O 程序中遇到了以下函數的問題,該程序也執行字和行計數(這些工作)。 char* 文件名是從命令行中提取的。 在這個例子中,它從一個帶有 lorum ipsum 的 txt 文件中提取。 (69 個字)理論上,下面的函數應該從文件名中讀取並將其寫入數組。 然后讀取該數組並檢查當前字符是否為空格 ' ' 而下一個字符不是。 無論如何,它目前都返回 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 個字符的數組是非常低效的,但我不知道該怎么做。 如果您有任何改進或其他方法來實現這一點,如果您分享,將不勝感激。 另外,我知道這目前忽略了其他類型的空格,但我只是先測試它,然后再擴展。

感謝您的幫助。

為什么你總是得到 0 個詞的結果的具體問題:

while (z>i-1) {

z永遠不會大於i-1 可能您打算在z小於i-1循環:

while (z<i-1) {

此外,您僅在找到單詞時才增加z 你應該為你測試的每個字符增加它,不管它是否是一個空格。

有一個示例函數可以滿足您的需求。 一些代碼建議,當您不再需要該文件時,fopen() 必須緊跟 fclose()。 始終檢查 fopen 返回的指針是否不為 NULL 並且在這種情況下什么都不做,只返回錯誤代碼。 新詞的存在可以通過空格字符后跟一個非空格字符來安全地檢測到,在這種情況下,增量世界計數++wc。 使用 getc() 從文件對象中讀取一個字符,並使用 isspace() 函數檢查該字符是否為空格一。 如果在 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>

暫無
暫無

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

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