0

2 つ以上の CSV ファイルを比較し、同じ名前の名前を見つけて、2 つ以上ある場合はそれらを出力するプログラムを作成しようとしています。各名前は、1 つのファイルに 1 回だけ表示されます。

一般的なファイルは次のようになります。

Name,E-mail,Student Level,Major
John Doe, jdoe@something.com, Freshman, CS
Jane Doe, janed@something.com, Freshman, CS
....

したがって、これらの名前のいずれかが 2 つ以上のファイルにある場合、プログラムはその名前と、その名前がファイルに表示される合計回数を出力する必要があります。

私はこれまで多くのことをしてきました。1つのファイルから名前だけを印刷するようになりました。次に何をすべきかわからない。これがそのコードです。

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

#define buffer 1024

int main(){
    FILE *fp;
    char temp[buffer], *fn, *ln;
    char *first[buffer], *last[buffer];
    int line_count = 0;
    fp = fopen("students.csv", "r");

    while( (fgets(temp, buffer, fp) != NULL) )
    {
            first[line_count] = (char *)malloc(sizeof(char)* buffer);
            last[line_count] = (char *)malloc(sizeof(char) * buffer);

            ln = strtok(temp,",");
            fn = strtok(NULL,",");
            strcpy(first[line_count], fn);
            strcpy(last[line_count], ln);
            line_count++;
    }

    while(line_count--)
    {
            printf("Name : %s %s\n", first[line_count], last[line_count]);
    }

    fclose(fp);
    return 0;
}

私はC++が初めてなので(したがって、Cでコードを書いています)、誰かが私を正しい方向に向けることができれば。それは素晴らしいことです。ありがとうございました。

4

2 に答える 2

1

CSV 入力ファイルから各名前を読み取るときに、それを に挿入するstd::set<std::string>必要があります (および を実行する必要が#include <set>あり#include <string>ます。キーが既に存在するために失敗した場合は、その名前が出力の 1 つであることがわかります。

于 2013-01-30T07:58:30.647 に答える
0

あなたはコードではなくメソッドを探しているだけのようです (あなたはすでに C を書くのが好きです)。次に、すでにあるものを使用する「方法」を示します。

すでに 1 つのファイルの解析に成功しているため、他のファイルに対してプロセスを繰り返すだけです (コピー、貼り付け、いくつかの名前の変更など)。

次に、first1、first2、last1、last2 などの 2 つの配列セットを作成します。これで、それらをステップ実行して、一致するものを見つけることができます (以下の sudo コード)。

for each line in first1 and last2
  look for match in first2 and last2
  log/print the matches

あなたがどのように取り組んでいるかについては、C++っぽいコードをもっとお勧めします。std::string および std::vector 機能を利用して、コードをより単純にすることができます。

于 2013-01-30T08:22:25.180 に答える