我正在尝试使用C编码制作uniq命令,这将删除和复制行作为家庭作业的一部分。我是1年的java和字面上jsut开始C编程。它势不可挡。我决定要做的基本事情是创建一个接收文件的程序,然后打印出它的内容。接下来我决定让程序告诉我们有多少行。我现在的问题是让每一行显示其各自的行。在我的代码中,每一行都会显示其行和前一行。在此之后,我需要弄清楚如何使我的程序扫描每行重复并删除它们。任何帮助都可以,谢谢!
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <ctype.h>
void process_file(FILE* f);
char str [1000];
char c;
int r=0;
int line;
char temp;
int main(int argc, char* argv[]){
process_file(argv[1]);
return 0;
}
void process_file(FILE* f){
FILE *fp = fopen(f,"r");
if ( fp == NULL){
printf("Error: No such file\n");
exit(1);
}
while( (c = fgetc(fp)) != EOF){
str[r] = c;
r++;
if (c =='\n'){
line++;
printf("new line %d\n", line);
printf("%s\n", str);
}
}
fclose(fp);
return;
}
答案 0 :(得分:0)
您可以使用临时文件来保存其中的唯一行,并检查新的读取行到其行。最后,你可以阅读并打印出来。
当您从输入文件中读取新行时,请检查它是否存在于临时文件中,如果存在,请转到下一个新行。如果没有,请将其作为唯一行添加到临时文件中,然后转到下一行。
注意: 确保最大行数字符数不超过str数组长度。 当输入文件很大并且它有许多独特的行时,使用数组变量来维护所有唯一的行并不是一个好主意。如果您知道输入文件的大小很小,则可以使用两个demential数组而不是文件来处理它。
如果决定使用临时文件,在检查重复行时,每次Go At The File Of File,逐行读取,并搜索新行是否存在。
使用fgets函数完全读取行,而不是按char读取char。