2016-10-29 158 views
-2

我正在處理一個小的賦值,並且它的一部分需要我將字符串拆分爲整數和字符。這些整數和字符然後存儲在不同的向量中。例如,如果我輸入'* +/9 8 7',我想在另一個矢量中存儲'*','+'和'/',並將9,8和7存儲在另一個矢量中。下面是我爲這個程序寫的代碼將字符串拆分爲字符和整數C++

string InputString; 
getline(cin,InputString); 
stringstream ss(InputString); 
vector<int>operands; 
vector<char>operators; 
char op; 
int num; 
while(ss>>op) 
{ 

    if((op=='+')||(op=='-')||(op=='*')||(op=='/')) 
    { 
     operators.push_back(op); 
    } 
    else 
    { 
     ss>>num;  
     operands.push_back(num); 
    } 
} 

for (unsigned int k = 0;k<operands.size();k++) 
{ 
    cout<<operands[k]<<" "; 
} 

cout<<endl; 

for (unsigned int x = 0;x<operators.size();x++) 
{ 
    cout<<operators[x]<<" "; 
} 

問題是我的輸出不能正確存儲整數。我的字符被正確存儲(當我在我的第二個循環中打印出整數向量的內容時,我只輸入了最後一個數字)。我希望我的問題不是太混亂。我無法在StackOverflow上找到其他相關文章

+0

您是否嘗試過使用調試器?很容易找到它的錯誤。 – Danh

+0

'while(ss >> op)'吃了數字的第一個字符。你必須把它放回去。 – user4581301

+0

你會怎麼做? – VVSTITAN

回答

0

要恢復數字的所有數字,您必須unget()被測試的字符。

只是解析數如下之前添加ss.unget();

else 
{ 
    ss.unget(); // recover the op character 
    ss>>num; 
    operands.push_back(num); 
}