我試圖根據標記定義爲帶引號的字符串,一組非空格字符或|
字符的標準來標記輸入字符串。顯然,在這種情況下strtok
將無法正常工作,所以我想也許使用正則表達式?或者也許有一個我還沒有想到的更簡單的解決方案?在沒有strtok的情況下在C中進行令牌化()
有沒有人遇到過,或者甚至有一個建議,我可以如何處理這個?謝謝!
我試圖根據標記定義爲帶引號的字符串,一組非空格字符或|
字符的標準來標記輸入字符串。顯然,在這種情況下strtok
將無法正常工作,所以我想也許使用正則表達式?或者也許有一個我還沒有想到的更簡單的解決方案?在沒有strtok的情況下在C中進行令牌化()
有沒有人遇到過,或者甚至有一個建議,我可以如何處理這個?謝謝!
人們還在使用lex和yacc嗎?如果不是,您可能需要自己創建一個狀態機,並一次使用您輸入的一個字符來爲狀態機提供消耗您的輸入。這就是lex無論如何都會做的。
做你自己的解析器。正則表達式通常用於比這更復雜的表達式,但這是一個好主意。
你應該通過char檢查char並使用條件來確定它是否是一個令牌。
首先,爲什麼strtok()
'顯然'不起作用?您似乎暗示strtok()
無法與多個分隔符一起使用;它確實(char * delim
是指向一組定界符的指針)。如果你想從頭開始構建它,這是一個合理的開始。使用正則表達式是一個階段,但仍然是「從頭開始構建」。但是,如果您不想從頭開始構建它,請查看lex
(或flex
),它將以lex
源文件的形式爲C生成一個令牌。
我相信strtok()不會工作,因爲如果我有以下字符串:abc「這很有趣」,標記輸出將是:abc,「this,is,fun」,而不是我正在查找的輸出,即:abc,這很有趣 – user2266603
'strtok'不能處理爲你自動引用的字符串,但你可以(例如)使用'strtok'來查找分隔符的邊界,而這些分隔符將是vari能夠。在不解析字符串常量的情況下,您可以查找空格和「」作爲分隔符。在解析字符串常量的同時,您只需查找'''作爲分隔符。 'strtok()'只是一個榮耀的'for'循環,用於搜索一組字符中的一個並插入'\ 0';如果你正在編寫你自己的解析器,你將需要這樣的東西。爲了讓生活更輕鬆,請使用'lex'(或'flex')。 – abligh
如果您想快速嘗試一個正則表達式,並且您將稍後使用它,請嘗試使用regexr。 你可以粘貼你的輸入,它顯示你的正則表達式匹配。
以有限狀態機的形式編寫自定義詞法分析器。你的語法非常簡單,相當容易。 – Jon
當要求提供正則表達式解決方案時,請包含要匹配的項目列表以及您希望忽略的項目列表。 – npinti
爲什麼不'strtok'工作?您可以指定多個分隔符。 –