我有N个文件,每个文件的每一行都有唯一的单词和单词count,例如
file1 file2 file3
the 2 black 3 red 4
apple 4 tree 2 crab 6
snake 3 mantle 8 puppet 1
如何将按排序顺序将这些文件合并为一个文件,提前感谢,真的需要一个想法。
void *doMerge(void* arg){
int i,j,p = 0, k = 0;
char*min = malloc(sizeof(char)*256);
FILE *f = fopen("fileFinal","w+");
char **StringBuffer = (char **)malloc(sizeof(char*)*R);
int *IntBuffer = malloc(sizeof(int)*R);
for(i=0; i < R; i++){
rewind(temp2[i]);
StringBuffer[i] = (char *)malloc(sizeof(char)*256);
if(fscanf(temp2[i],"%s %d",StringBuffer[i],&IntBuffer[i]) == 1)
printf("String is %s and int is %d\n",StringBuffer[i],IntBuffer[i]);
}
while(1){
strcpy(min, StringBuffer[0]);
for(j=0 ; j < R-1; j++){
if(strcmp(StringBuffer[j+1],StringBuffer[j]) <= 0){
strcpy(min,StringBuffer[j+1]);
p = j+1;
}
}fprintf(f,"%s %d\n",min, p);
if(fscanf(temp2[p],"%s %d",StringBuffer[p],&IntBuffer[p]) == 1){}
k++;
}
};
答案 0 :(得分:0)
while(1)
{
strcpy(min, StringBuffer[0]);
for(j=0 ; j < R-1; j++){
if(strcmp(StringBuffer[j+1],StringBuffer[j]) <= 0)
{
strcpy(min,StringBuffer[j+1]);
p = j+1;
}
}
fprintf(f,"%s %d\n",min, p);
if(fscanf(temp2[p],"%s %d",StringBuffer[p],&IntBuffer[p]) == 1)
{}
k++;
}
while
循环有许多不同的问题
1)p
需要在0
循环之前初始化为for
2)strcmp
应该将min
与StringBuffer[j]
进行比较,这也意味着
2a)for
循环应为for(j=1;j<R;j++)
和
2b)strcpy(min,StringBuffer[j+1]);
应为strcpy(min,StringBuffer[j]);
,和
2c)行p=j+1
应为p=j
3)k
不用于任何内容,应删除
但最重要的是fscanf
。您应该检查fscanf
是否返回2
。如果没有,则文件完成,您需要跟踪文件已完成的事实,并且不应再在for
循环中检查该文件。