gpt4 book ai didi

c - 在c中标记一个字符串

转载 作者:行者123 更新时间:2023-11-30 21:31:20 25 4
gpt4 key购买 nike

如何在 c: 中标记这样的字符串:

char str1[] = " property :: content | label ";
char str2[] = "property::content";
char str3[] = "content";

[编辑]

我尝试过以下方法:

char str[] = " property :: content | label ";
char *property, *content, *label;

property = strtok(str, "::");
content = strtok(NULL, "|");
label = strtok(NULL, "|");

printf ("%s %s %s\n", property, content, label);

但它根据字符分割字符串,因此它适用于用于分隔标签的管道字符。但是“::”分隔符是字符串,而不是字符。我不知道该如何处理。

[编辑2]

我也有这个代码:

char sentence [] = "property :: content | label";
char property [30];
char content [30];
char label [30];

sscanf (sentence, "%s :: %s | %s", property, content, label);
printf ("<span property=\"%s\" content=\"%s\">%s</span>\n", property, content, label);

我只是想知道如何动态设置每个字符数组的大小...

谢谢。

最佳答案

您需要的是基本的lexer

了解它的最好方法是拿起一本编译器书籍并阅读它。

简而言之,您需要一堆 regular expressions并开始将字符串与正则表达式进行匹配,直到找到最大的匹配项及其对应的处于最终状态的 dfa。

或者,如果每个标记都用空格分隔,则可以简单地使用 strtokstrcmp 来区分特殊单词(例如 ::) 和其余的输入。

词法分析完成后,你需要一个 parser 。我不了解您的应用程序,因此您的解析器可能非常简单,但除此之外,this answer可能会帮助您开始。

关于c - 在c中标记一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777877/

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