我使用下面的函数从FILE流中逐个检索字符。 现在该文件中的文本有时会包含像!first_name这样的地方持有者!在文中。什么是检测何时这样的占位符开始以及何时结束以便我可以在每个角色之间交换的最佳方法!从另一个存储具有适当的特征?
void print_chars(FILE *file) {
fseek(file, 0L, 0);
int cr;
do {
cr = fgetc(file);
putchar(cr);
} while (cr != EOF);
}
答案 0 :(得分:5)
首先使用fgets()
一次读取行,然后(假设占位符中没有空格或换行符),使用strchr()
找到第一个感叹号,找到另一个感叹号第二个,strcpsn()
或strspn()
以确保它们之间只显示允许的字符。然后写下第一个感叹号和替换文本之前的内容,然后继续扫描同一行上的更多占位符。
答案 1 :(得分:1)
构造一个有限自动机又名状态机?
答案 2 :(得分:1)
你也可以采用一种更原始的方法,一次只能读取1个字符,然后在char =='!然后构建一个字符串直到另一个'!'然后只需将该字符串与您的替换列表进行比较..
@ goe的回复 要说推一个字符..这里有一些代码
//c is char read from file
if(c=='!'){
char str[100];
c=fgetc
int i=0;
while(c!='!'){
str[i]=c;
i++;
c=fgetc
}
i++;
str[i]='\0'; //null terminate
if(strcmp(str,"....")... //continue...
}
答案 3 :(得分:1)
如果你想要一些可靠处理角落情况的东西,可以考虑使用像Lex或re2c这样的真实词法分析工具。