2013-03-12 50 views
0

我正在使用istringstream來打破字符串的標記。比方說,我有一個這樣的字符串:istringstream不能標記引號之間的文本

print "this is a test" 

它打破它變成5個標記:

打印| 「這|是| A |測試」

,它應該產生2個令牌:

打印| 「這是一個測試」

有沒有一個很好的方法來解決它?我嘗試通過在文本中查找引號並執行子字符串來手動執行此操作,但這樣做太多了。

我想應該有一個更簡單的方法,或者是istringstream這樣做的方法嗎?

+1

http://stackoverflow.com/questions/5534620/mimicking-the-shell-argument-parser-in-c – jxh 2013-03-12 16:43:13

回答

1

以及iostreams通過.. token令牌化。在這種情況下令牌由空格分隔。你將不得不逐行閱讀(或者也許是整件事情!)並自己解析它。

1

您可以使用wordexp來做到這一點,但它有限制,因爲它使用命令shell來進行解析。特別是,它會對處理重定向的shell符號做出嚴重反應。它也會進行環境變量擴展,這可能是也可能不是你想要的。

wordexp_t result; 
wordexp(cmdstr.c_str(), &result, 0); 
for (int i = 0; result.we_wordv[i]; ++i) { 
    //... 
} 
wordfree(&result); 

詳情請見wordexp man page

相關問題