gpt4 book ai didi

c - 访问下一个单词/字符串

转载 作者:行者123 更新时间:2023-11-30 17:08:18 25 4
gpt4 key购买 nike

我有一个简单的基于 C 的代码来读取文件。逐行读取输入。标记该行并打印当前标记。我的问题是,如果满足某些条件,我想打印下一个 token 。你知道该怎么做吗?我真的需要你的帮助来完成这个项目。谢谢这是代码:

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;}

最佳答案

继续我的评论。我不确定我完全理解你需要什么,但如果你有字符串:

"The quick brown fox";

并且,您想要标记字符串,打印下一个单词,只有当满足当前单词的条件时,您才需要调整您的想法一点点。在您的示例中,您希望打印下一个单词“quick”,仅当当前单词是“The”.

思维上的调整就是你如何看待考试。如果当前匹配某些条件,您不需要考虑打印下一个单词,而是需要保存最后单词,并且只打印>当前如果最后单词匹配某些条件 - 在您的示例中为“The”

要处理这种情况,您可以使用至少包含 47 个字符的静态声明的字符数组(Merriam-Websters Unabridged Dictionary 中最长的单词为 46 个字符)。我将在下面的示例中使用 48。您可能只想保存指向最后一个单词的指针,但使用 strtok 时,不能保证保留上一次迭代返回的内存地址 - 因此请复制该单词。

将各个部分放在一起,您可以执行如下操作。它将先前的标记保存在 last 中,然后将当前单词与最后一个单词进行比较,并打印当前单词 if last == "The":

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXW 48

int main (void) {

char str[] = "The quick brown fox";
char last[MAXW] = {0};
char *p;

for (p = strtok (str, " "); p; p = strtok (NULL, " "))
{
if (*last && strcmp (last, "The") == 0)
printf (" '%s'\n", p);
strncpy (last, p, MAXW);
}

return 0;
}

输出

$ ./bin/str_chk_last
'quick'

如果您有任何疑问,请告诉我。

<小时/>

测试说明

如注释中所写,*last 只是 last[0] 的简写。因此,测试的第一部分 *last 只是测试 if ((last[0] != 0) && ..。由于 Last 最初被声明并初始化:

char last[MAXW] = {0};

第一次通过循环时,last 中的所有字符均为 0。通过包含检查 last[0] != 0,只会导致 for 循环第一次执行时跳过 printf。测试的简写如下所示:

    if ((last[0] != 0) && strcmp (last, "The") == 0)
printf (" '%s'\n", p);

其中伪代码只是说:

    if (NOT first iteration && last == "The")
printf (" '%s'\n", p);

如果这没有意义,请告诉我。

关于c - 访问下一个单词/字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33728097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com