我正在尝试编写一个程序,该程序将比较两个或更多CSV文件,并找到相同的名称,如果有两个或更多,则打印出来。每个名称只会在一个文件中出现一次。
这是典型文件的样子。
Name,E-mail,Student Level,Major
John Doe, jdoe@something.com, Freshman, CS
Jane Doe, janed@something.com, Freshman, CS
....
因此,如果这两个名称中的任何一个都在两个或多个文件中,程序应该打印出他们的名字和他们的名字在文件中显示的总次数。
到目前为止,我做了这么多。我已经得到它打印出一个文件中的名称。不知道接下来该做什么。这是代码。
#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编写代码),所以如果有人能指出我正确的方向。那太好了。谢谢。
答案 0 :(得分:1)
当您从CSV输入文件中读取每个名称时,应尝试将其插入std::set<std::string>
(您需要#include <set>
和#include <string>
。如果由于已经存在的密钥,您知道该名称是您的输出之一。
答案 1 :(得分:0)
因为看起来你只是在找一个方法而不是代码(你已经喜欢写C)了。然后这是一个使用你已经拥有的“方法”。
由于您已经成功解析了一个文件,只需重复其他文件的过程(复制,粘贴,更改一些名称等)。
然后你将有两组数组,比如first1,first2,last1,last2。现在你可以通过它们找到任何匹配(下面的sudo代码)。
for each line in first1 and last2
look for match in first2 and last2
log/print the matches
现在就你如何处理它我肯定会推荐更多的C ++ ish代码。您可以利用std :: string和std :: vector功能使代码更简单。