C读取文件并从输出中删除字符,没有数组

时间:2014-01-22 04:44:43

标签: c

首先这是一个家庭作业,所以让我们把它弄清楚,我不是在寻找免费的代码。 我无法使用数组。字符串似乎是C中的数组,因此它们已经出来了。 逻辑很简单,如果出现html标签将其删除或执行\ n或\ n \ n。没问题。 我似乎必须使用c = getc()中的stdio.h函数,因为所有其他函数似乎都在使用或创建数组。

我需要一个关于如何回溯的提示。 所以 if(c == '>') 我需要检查c-1, c-2,c-3等以查看之前的内容以及是否找到<br \> than write c = \n instead of <br \>. 逻辑很简单。 我的问题是getc()返回一个对应于给定字符的ASCII码的int值,并根据代码写出所述字符。

对于我正在使用do{while c != EOF的文件解析,虽然看起来for(c = getc(fp); c != EOF)也可以这样做,但我有同样的问题,循环由c指示。 如果getc()是错误的方法,请告诉我。我宁愿尝试自己而不是我的教授。但我不能使用任何数组,这是捕手。

干杯。 编辑:如果有帮助,这是我当前的实现。

void main()
{

    FILE *ifp, *ofp;
    int c;
    int n = 0;

    ifp = fopen("prog1in1.txt", "r");
    if(ifp == NULL){


    }
    ofp = fopen("prog1in1out.txt", "w");

    do{
        c = getc(ifp);

        if(c == '>')
            c = 'D';//just a test placeholder D holds no relevence:

            putc(c, ofp);
    }while(c !=EOF);

    for(c = getc(ifp); c!= EOF;)

    fclose(ifp);









}

2 个答案:

答案 0 :(得分:0)

为了帮助你,你究竟想做什么?如果您正在阅读文件fseek
可以用来回溯。

编辑:

每次拨打getc()时,您都会将光标移动一个位置,以便计算您所在的位置 文件。使用fseek(fptr, 10, SEEK_SET),您明确表示要从文件的开头移动10个位置。因此count就在fseek(fptr, count - 1, SEEK_SET)的情况下int c1,c2,c3,c4,c5; while( (c = getc(ifp)) != EOF ){ count++; if(c == '>'){ fseek(ifp, count - 6, SEEK_SET); c1 = getc(ifp); c2 = getc(ifp); c3 = getc(ifp); c4 = getc(ifp); c5 = getc(ifp); if(c1 == '<' && c2 == 'b' && c3 == 'r' && c4 == 32 && c5 == '\'){putc(D, ofp);} fseek(ifp, count, SEEK_SET); } } 是以前的一个地方。这有帮助吗?

Edit2:

"<br />";
"<h1>";
"<a-href /a>";

int c,c1,c2,c3,c4,c5;
while( (c = getc(ifp)) != EOF ){
    count++;

    if(c == '<'){
        c = getc(ifp);
        count++;
        if(c == 'b'){
            c1 = getc(ifp);
            c2 = getc(ifp);
            c3 = getc(ifp);
            c4 = getc(ifp);
            if(c1 == 'r' && c2 == 32 && c3 == '/' && c4 == '>'){putc(D, ofp);}
            else{putc(c1, ofp); putc(c2, ofp); putc(c3, ofp);}

            count += 4;
        }
        else if(c == 'h'){
            ......
        }
        else if(c == 'a'){
            .......
        }
        else{
            putc('<', ofp);
            putc(c, ofp);
        }
    }
    else{
        putc(c, ofp);
    }
}

EDIT3

{{1}}

类似的东西。

瓦尔特

答案 1 :(得分:0)

您可以使用变量c3,c2,c1等,并在读取字符时通过该链向下移动值;它不是一个“数组”,它只是一个功能。

实际上,我认为你不需要回溯。一点缓冲,但有一个合适的状态机...