2012-05-27 29 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