首先,这是一项家庭作业,所以让我们摆脱它,我不是在寻找免费代码。
我无法为此使用数组。字符串似乎是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);
}
最佳答案
您到底想做什么才能为您提供帮助。如果您正在读取文件fseek
可用于回溯。
编辑:
每次调用getc()
时,都将光标移到一个位置,这样就可以计算出您所在的位置
文件。使用fseek(fptr, 10, SEEK_SET)
明确表示要从文件的开头移10个位置。因此,如果count
是您所在的位置fseek(fptr, count - 1, SEEK_SET)
是以前的一个地方。有帮助吗?
编辑2:
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);
}
}
编辑3
"<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);
}
}
这样的事情。
瓦尔特