我试图使用C编码从linux生成uniq命令

时间:2016-04-04 22:23:39

标签: c arrays function file uniq

我正在尝试使用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;
}

1 个答案:

答案 0 :(得分:0)

您可以使用临时文件来保存其中的唯一行,并检查新的读取行到其行。最后,你可以阅读并打印出来。

当您从输入文件中读取新行时,请检查它是否存在于临时文件中,如果存在,请转到下一个新行。如果没有,请将其作为唯一行添加到临时文件中,然后转到下一行。

注意: 确保最大行数字符数不超过str数组长度。 当输入文件很大并且它有许多独特的行时,使用数组变量来维护所有唯一的行并不是一个好主意。如果您知道输入文件的大小很小,则可以使用两个demential数组而不是文件来处理它。

如果决定使用临时文件,在检查重复行时,每次Go At The File Of File,逐行读取,并搜索新行是否存在。

使用fgets函数完全读取行,而不是按char读取char。