代码应该返回没有空格的字符串,但它返回字符串直到第一个空格字符

时间:2011-07-16 16:52:26

标签: c++ string

我正在制作一个控制台计算器,我想删除用户在使用该程序时可能输入的任何空格。这是代码:

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
    string str;
    std::cout<<"Enter sum): ";
    cin>>str;
     str.erase(std::remove_if(str.begin(), str.end(), (int(*)(int))isspace), str.end());
    cout<<str;
    system("pause");
    return 0;
}

如果我输入2 + 2 =,则输出应为2 + 2 = 但输出是:2 我在这里使用了错误的功能吗?

3 个答案:

答案 0 :(得分:4)

问题在于获取用户输入,而不是剥离空格。

删除空格的代码是正确的,您可以see for yourself on IDEone

问题是运算符std::istream::operator >>在遇到第一个空白字符时停止读取输入。您应该使用其他功能(例如getLine)。

答案 1 :(得分:1)

您对remove_iferase的使用很好。您获取输入的方法不是。 operator>>是以空格分隔的。请改用getline

int main()
{
    string str;
    std::cout<<"Enter sum): ";
    getline(cin,str);
    str.erase(std::remove_if(str.begin(), str.end(), (int(*)(int))isspace), str.end());
    cout<<str;    
    return 0;
}

答案 2 :(得分:0)

我使用我写的以下函数:

std::string& ReplaceAll(std::string& sS, const std::string& sWhat, const std::string& sReplacement) 
{
    size_t pos = 0, fpos;
    while ((fpos = sS.find(sWhat, pos)) != std::string::npos) 
    {
        sS.replace(fpos, sWhat.size(), sReplacement);
        pos = fpos + sReplacement.size();
    }
    return sS;
}

您可以根据自己的需要进行调整。