将字符串拆分为字符和整数c ++

时间:2016-10-29 03:17:21

标签: c++ stringstream

我正在进行一项小任务,其中一部分要求我将字符串拆分为整数和字符。然后将这些整数和字符存储在单独的向量中。例如,如果我输入'* + / 9 8 7',我想在一个向量中存储'*','+'和'/',在另一个向量中存储9,8和7。以下是我为该程序编写的代码

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]<<" ";
}

问题是我的输出没有正确存储整数。我的字符存储正确(当我在第二个for循环中打印出整数向量的内容时,我只输入最后一个数字)。我希望我的问题不会太混乱。我在StackOverflow上找不到其他相关帖子

1 个答案:

答案 0 :(得分:0)

要恢复该数字的所有数字,您必须取消()测试的字符。

在解析数字之前添加ss.unget();,如下所示:

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