在c中标记一个字符串

时间:2012-05-27 23:00:37

标签: c string tokenize

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

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

[编辑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);

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

感谢。

1 个答案:

答案 0 :(得分:0)

您需要的是基本的lexer

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

简而言之,你需要一堆regular expressions并开始将你的字符串与正则表达式匹配,直到找到最大匹配的字符串与最终状态的相应dfa。

或者,如果每个标记都按空格分隔,您只需使用strtokstrcmp来区分特殊字词(例如::)和输入的其余部分。< / p>

词法分析完成后,您需要parser。我不知道您的应用程序,因此您的解析器可能非常简单,但除此之外,this answer可能会帮助您启动。