2013-03-01 161 views
1

對於我的C之一++任務,我要解析這樣的句子如下:爲什麼我不正確解析?

 
SET a = 10 
SET b = a 
PRINT b 

要解析器這些語句,我用下面的代碼:

vector<string> stringSplitter(istringstream& tmp) { 
vector<string> tokens; 
string str; 
while(tmp.good()) { 
    tmp >> str; 
    tokens.push_back(str);    
} 
return tokens; 
} 

錯誤檢查我要確保SET命令只有4個標記,而PRINT語句只有2個標記。

if (tokens.size() != 4) { 
cerr << "Error in Line "<< lineNumber <<":Invalid format\n"; 
return -1; 
} 

if (tokens.size() != 2) { 
cerr << "Error in Line "<< lineNumber <<":Invalid format\n"; 
return -1; 
} 

我遇到的問題是,它適用於「集A = 10」,「:我有當我檢查設置命令和打印命令,以便相應的條件打印一個「 因爲它不起作用,如果在句末有一個空格,如」SET a = 10「和」PRINT a「

任何人都可以幫忙嗎?

+0

這裏有一個關於從std :: string修剪whitepace的SO帖子:http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring – 2013-03-01 16:22:58

回答

4

使用

while (tmp >> str) 

tmp.good()只是說是否有什麼事都沒有。你想知道是否得到另一個字符串的工作。

+0

我會盡力 – ueg1990 2013-03-01 17:08:28

+0

它的工作thnx很多 – ueg1990 2013-03-01 17:51:23

0

>>運算符使用空格進行標記,所以如果在=左右省略空格,就不會得到想要的結果。

而是使用更高級的功能來分割。

+2

這可能是正確的一般情況下,但看起來OP的語法非常嚴格。 OP也似乎*希望* >>的標記化特徵。 – user7116 2013-03-01 16:27:01

相關問題