2014-02-13 107 views
0

我試圖根據標記定義爲帶引號的字符串,一組非空格字符或|字符的標準來標記輸入字符串。顯然,在這種情況下strtok將無法​​正常工作,所以我想也許使用正則表達式?或者也許有一個我還沒有想到的更簡單的解決方案?在沒有strtok的情況下在C中進行令牌化()

有沒有人遇到過,或者甚至有一個建議,我可以如何處理這個?謝謝!

+1

以有限狀態機的形式編寫自定義詞法分析器。你的語法非常簡單,相當容易。 – Jon

+0

當要求提供正則表達式解決方案時,請包含要匹配的項目列表以及您希望忽略的項目列表。 – npinti

+1

爲什麼不'strtok'工作?您可以指定多個分隔符。 –

回答

0

人們還在使用lex和yacc嗎?如果不是,您可能需要自己創建一個狀態機,並一次使用您輸入的一個字符來爲狀態機提供消耗您的輸入。這就是lex無論如何都會做的。

0

做你自己的解析器。正則表達式通常用於比這更復雜的表達式,但這是一個好主意。

你應該通過char檢查char並使用條件來確定它是否是一個令牌。

1

首先,爲什麼strtok()'顯然'不起作用?您似乎暗示strtok()無法與多個分隔符一起使用;它確實(char * delim是指向一組定界符的指針)。如果你想從頭開始構建它,這是一個合理的開始。使用正則表達式是一個階段,但仍然是「從頭開始構建」。但是,如果您不想從頭開始構建它,請查看lex(或flex),它將以lex源文件的形式爲C生成一個令牌。

+0

我相信strtok()不會工作,因爲如果我有以下字符串:abc「這很有趣」,標記輸出將是:abc,「this,is,fun」,而不是我正在查找的輸出,即:abc,這很有趣 – user2266603

+0

'strtok'不能處理爲你自動引用的字符串,但你可以(例如)使用'strtok'來查找分隔符的邊界,而這些分隔符將是vari能夠。在不解析字符串常量的情況下,您可以查找空格和「」作爲分隔符。在解析字符串常量的同時,您只需查找'''作爲分隔符。 'strtok()'只是一個榮耀的'for'循環,用於搜索一組字符中的一個並插入'\ 0';如果你正在編寫你自己的解析器,你將需要這樣的東西。爲了讓生活更輕鬆,請使用'lex'(或'flex')。 – abligh

0

如果您想快速嘗試一個正則表達式,並且您將稍後使用它,請嘗試使用regexr。 你可以粘貼你的輸入,它顯示你的正則表達式匹配。

相關問題