2014-10-26 69 views
0

我是C++的新手,我試圖逐個讀取字符串中的每個字符。這是我在做什麼:在一個字符串上循環丟失最後一個字符

string sum = "1 + 3 x 2\n"; 
char delimiter = ' '; 
string token = ""; 
vector<string> tokens; 

for(char c: sum) 
{ 
    if(c == delimiter) 
    { 
     tokens.push_back(token); 
     token = ""; 
    } 
    else 
    { 
     token += c; 
    } 
} 

因此,我基本上是標記我的字符串。在我看來,我應該最終得到:

tokens[0] = "1"; 
tokens[1] = "+"; 
tokens[2] = "3"; 
tokens[3] = "x"; 
tokens[4] = "2"; 

但是,當我運行這個我沒有得到最後的「2」。我想這是因爲斷行的(這是必要的,不值得解釋」。

爲什麼會出現這種情況?

+0

是的,這是因爲你的後面沒有分隔符(空格)。你可以做的是檢查'(c == delimiter)|| (c =='\ n')' – kyflare 2014-10-26 21:41:26

+1

你明白了。如果你把這個作爲答案,我會爲你+1。非常感謝。 – user3761858 2014-10-26 21:45:38

回答

2

你應該改變分隔符形式是一個char是一個字符串,然後檢查c是否在該字符串中。

string sum = "1 + 3 x 2\n"; 
string delimiters = " \n"; 
string token = ""; 
vector<string> tokens; 

for(char c: sum) 
{ 
    if(delimiters.find(c) != string::npos) 
    { 
     tokens.push_back(token); 
     token = ""; 
    } 
    else 
    { 
     token += c; 
    } 
} 

這也應該在最後換行。

+0

您也可以使用cctype頭並使用isspace(c)來檢查它是否爲空白區,但與舊C函數中的端口一樣略爲不推薦使用,並且這樣更靈活,因爲您可以選擇所需的分隔符。 – Alexandru 2014-10-26 21:48:05

0

與您的代碼,令牌推到向量空間後發現,由於存在是2後沒有空間,2個不推。

,你可以做些什麼來解決這個問題是在最後檢查的換行符if(c == delimiter || c == '\n')

相關問題