首先这是一个家庭作业,所以让我们把它弄清楚,我不是在寻找免费的代码。
我无法使用数组。字符串似乎是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);
}
答案 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等,并在读取字符时通过该链向下移动值;它不是一个“数组”,它只是一个功能。
实际上,我认为你不需要回溯。一点缓冲,但有一个合适的状态机...