3

システムプログラミングクラスのために書いているプログラムについて、助けが必要です。これはCであり、Cの経験はほとんどありません。3つのテキストファイルを次の形式でマージする必要があります。

word1
word2
word3
...
wordX

また、3つのファイルすべてから各単語を取得し、それらを2D配列(文字列配列の配列)に入れてから、何らかの並べ替え方法を使用します。

並べ替えのサポートは必要ありませんが、各テキストファイルから単語数を取得する方法や配列に入れる方法がわかりません。


これは、ファイル内の単語を数えるために私が持っている関数です。コンパイルされませんgcc(おそらく明らかな理由で、しかし私はそれらを知りません)。私も正しい考えを持っていますか?

int countWords(FILE f){
   int count = 0;
   char ch;
   while ((ch = fgetc(f)) != EOF){
       if (ch == '\n')
           count++;
       //return count; originally here, but shouldn't be.
   }
       return count;
}

編集:私はプログラムの行を数える方法を見つけることができると思っていましたが、アプローチが私がここでやろうとしているものと何か違うかどうかはわかりません。(私はテキストファイルの操作がこれほど上手ではありませんでした。


プログラムのすべての行をカウントするようになりました。私は少しさびていると思います。


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

int countWords(FILE *f){
   int count = 0;
   char ch;
   while ((ch = fgetc(f)) != EOF){
       if (ch == '\n')
           count++;
   }
   return count;
}
int main(void){

   int wordCount = 0;
   FILE *rFile = fopen("american0.txt", "r");
   wordCount += countWords(rFile);
   printf("%d", wordCount);
   return 0;
}

ポインタのことを忘れてしまいましたFILE *fileName

4

3 に答える 3

2

である必要がありint countWords(FILE *f){ます*。そして、returnステートメントは}、ループの外側で、最後の前にのみ配置する必要があります。

于 2011-09-10T19:30:33.017 に答える
2

cのファイルに使用するタイプはですFILE*。その星は重要であり、タイプが「FILEへのポインタ」であることを示しています。それがcountWords(FILE f)あなたが書くつもりだったものである可能性は低いです。

関数を呼び出すたびに、新しいcount = 0が返されるため、常に0または1が返されます。を使用するかstatic int count;、countをグローバル変数にするか、現在のcountを関数に渡してみてください。もう1つのオプションは、行をループreturn count;の外側に移動することです。while

また、投稿した形式を使用して、単語数を取得するには、カウントを2で割る必要があります。

于 2011-09-10T19:33:01.970 に答える
0

これがコードです。スペースの数を読んでください。

#include<stdio.h>
#define FILE_READ "file.txt"

    int main()

{
    FILE * filp;
    int count = 1;
    char c;
    filp = fopen(FILE_READ, "r");
    if(filp == NULL)
        printf("file not found\n");
    while((c = fgetc(filp)) != EOF) {
        if(c == ' ')
            count++;
    }
    printf("worrds = %d\n", count);
    return 0;
}

テキストファイル

I am megharaj, from india.

出力、

worrds = 5
于 2013-09-23T09:32:46.460 に答える