【发布时间】:2016-02-17 02:55:03
【问题描述】:
我有一个简单的基于 C 的代码来读取文件。逐行读取输入。标记该行并打印当前标记。我的问题是,如果满足某些条件,我想打印下一个令牌。你知道怎么做吗?我真的需要你对这个项目的帮助。谢谢 代码如下:
main(){
FILE *input;
FILE *output;
//char filename[100];
const char *filename = "sample1.txt";
input=fopen(filename,"r");
output=fopen("test.st","w");
char word[1000];
char *token;
int num =0;
char var[100];
fprintf(output,"LEXEME, TOKEN");
while( fgets(word, 1000, input) != NULL ){ //reads a line
token = strtok(word, " \t\n" ); // tokenize the line
while(token!=NULL){ // while line is not equal to null
fprintf(output,"\n");
if (strcmp(token,"SIOL")==0)
fprintf(output,"SIOL, SIOL", token);
else if (strcmp(token,"DEFINE")==0)
fprintf(output,"DEFINE, DEFINE", token);
else if (strcmp(token,"INTEGER")==0){
fprintf(output,"INTEGER, INTEGER");
strcpy(var,token+1);
fprintf(output,"\n%s,Ident",var);
}
else{
printf("%s\n", token);
}
token = strtok(NULL, " \t\n" ); //tokenize the word
}}fclose(output);return 0;}
【问题讨论】:
-
你试过
strtok吗? -
strtok是一个不错的选择,但如果我理解正确,您想根据当前的某些条件打印或不打印下一个,那么如果您正在解析该行串行方式,为什么不在“无打印”情况下跳到以下空格或换行符。您将需要发布更多详细信息以获得更详细的帮助。不知道自己目前在做什么极大地限制了您可以获得的帮助。 -
是的,这就是我用来标记该行的方法。我可以打印当前的令牌。如果满足某些条件,我需要打印下一个或即将到来的令牌。例如,字符串是“The quick brown fox” 当前标记是 'The'。 if (strcmp("The", "The")==0) printf ("quick").
标签: c string pointers file-handling