如何在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数组的大小......
感谢。
答案 0 :(得分:0)
您需要的是基本的lexer
了解它的最好方法是拿起一本编译器书并阅读它。
简而言之,你需要一堆regular expressions并开始将你的字符串与正则表达式匹配,直到找到最大匹配的字符串与最终状态的相应dfa。
或者,如果每个标记都按空格分隔,您只需使用strtok
和strcmp
来区分特殊字词(例如::
)和输入的其余部分。< / p>
词法分析完成后,您需要parser。我不知道您的应用程序,因此您的解析器可能非常简单,但除此之外,this answer可能会帮助您启动。