-4

如何在 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);

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

谢谢。

4

1 回答 1

0

你需要的是一个基本的词法分析器

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

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

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

词法分析完成后,你需要一个parser。我不知道你的应用程序,所以你的解析器可能会变得非常简单,但否则,这个答案可能会帮助你开始。

于 2012-05-27T23:36:34.103 回答