2012-05-27 33 views
-4

字符串我怎样才能标记化字符串这样在C:记号化在C

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

[编辑]

我已经试过folowwing:

但它分裂根据串到一个字符,所以它可以用于分隔标签的管道字符。然而“::”分隔符是一个字符串,而不是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); 

我只是想知道我怎么能动态地设置每一个字符数组的大小...

感谢。

+3

你可以试试'strtok'或'sscanf'。 – cnicutar

+0

或者对于更多的核心标记,请尝试'flex' – blueshift

+0

@cnicutar:谢谢。 strtok根据char分割,所以它可以用于分隔标签的管道字符。但是“::”是一个字符串。我不知道如何处理它。 – user1415785

回答

0

你需要的是知道它是拿起一个编译器的书,对阅读基本lexer

的最好方法。

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

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

词法分析完成后,您需要一个。我不知道你的应用程序,所以你的解析器可能变得非常简单,否则,this answer可能会帮助你启动。

+0

谢谢,我会研究它! – user1415785