c - 如何扫描输入字符串以获取 token 流

标签 c tokenize

我正在做一个简单的词法分析器 C 程序。我首先要做的是将输入的语句标记化。 (示例语句:printf1234==---abc)

如何使用 strtok() 分隔“printf”、“1234”、“=”、“---”和“abc”?

这是我的实验代码:

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

void main()
{
    char input_string[100];
    char string_storage[100][100];
    char *token;

    printf("Enter a string: ");
    gets(input_string);

    token = strtok(input_string, " ");
    while(token != NULL)
    {
        printf("%s\n",token);
        //strcpy(input_storage,token);
        token = strtok(NULL, " ");
    }
    getch();
}

最佳答案

strtok 是基于分隔符进行空间 segmentation 。这里你没有明确的分界线。您正在寻找语义子部分,它基于您期望在每个 token 中包含的内容类型。您应该查看一下正则表达式理论。您现在应该限制输入语句,例如您有一个文本命令,然后是数字,然后始终是 = 符号,等等。

关于c - 如何扫描输入字符串以获取 token 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48171062/

相关文章:

c - 在 C/C++ 中从文件中读取数据直到行尾

python - 在 Python 中从另一个列表中排除一个列表中的项目的有效方法

Java 扫描器定界符

python-3.x - 对中英文文本进行分词不正确地将英文单词拆分为字母

c++ - 如何从进程内部确定 CPU 和内存消耗

c - C 中的 BOM 字节序

c - 如何更改c中的线程用户?

c - Raspberry Pi - 如何同时使用I2C和GPIO?

c++ - 标记日文字符串并转换为平假名

java - 自定义标记器 solr 仅在第一次调用