【发布时间】:2017-05-07 12:53:01
【问题描述】:
我想知道一种按行对文本文件进行排序的简单方法。 我有 2 个文件:
文件1:
asazxz
dsa dsasd
dsds tut
pewoq
文件2:
uiosda dsds
poisss
我当前的代码是:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[]){
int nrf1=0;
int nrf2=0;
FILE *f1=NULL;
FILE *f2=NULL;
FILE *fe=NULL;
f1=fopen(argv[1],"r");
f2=fopen(argv[2],"r");
fe=fopen(argv[3],"w");
if (f1==NULL || f2==NULL || fe==NULL){
printf("couldn't open a file \n");
return 1;
}
char p;
while (1){
p=fgetc(f1);
if(p==EOF) break;
nrf1++;
}
while(1){
p=fgetc(f2);
if(p==EOF) break;
nrf2++;
}
rewind(f1);
rewind(f2);
while ( (p = fgetc(f1))!= EOF )
fputc(p,fe);
while ( (p = fgetc(f2))!= EOF )
fputc(p,fe);
//if(nrf1>nrf2){
//printf("%s %d \n",argv[1],\nrf1);
//while( (p=fgetc(f1))!=EOF )
//
//}
//else{
//printf("%s %d \n",argv[2],nrf2);
//while( (p=fgetc(f2))!=EOF )
//
//}
rewind(fe);
fclose(f1);
fclose(f2);
fclose(fe);
return 0;
}
我将file1和file2合并到一个file3中
我对如何按行对文件 3 进行排序有一些想法,但我真的不知道如何实现它们。
一个是遍历两个中较长的文本,找到一个 \n 和所有文本直到 \n 被放入一个数组中并对数组进行排序,然后将排序后的数组的每个元素放在一个行格式文件3。
另一个正在检查 file3 并尝试以某种方式按字母顺序切换行,例如冒泡排序。
edit:设法做到了,只是需要一些指导,谢谢大家
【问题讨论】:
-
可以用linux的排序命令吗?
-
鉴于“计算机编程艺术第 3 卷”的大部分内容都致力于回答这个领域,我认为这是典型的“过于宽泛”的问题。
-
第一个循环的目的是什么?
-
对于像这样的小文件,我会将每一行读入一个 malloc 的数组(每次行太长时使用 realloc 将数组的大小加倍),并将这些行存储在数组(也分配和重新分配)。然后对行进行排序并写出来。
-
@MartinBonner 鉴于我可以在没有阅读那本书的情况下想到大约六种合理的解决方案,我不得不同意你的看法。