我正在制作一个控制台计算器,我想删除用户在使用该程序时可能输入的任何空格。这是代码:
#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 我在这里使用了错误的功能吗?
答案 0 :(得分:4)
问题在于获取用户输入,而不是剥离空格。
删除空格的代码是正确的,您可以see for yourself on IDEone。
问题是运算符std::istream::operator >>
在遇到第一个空白字符时停止读取输入。您应该使用其他功能(例如getLine
)。
答案 1 :(得分:1)
您对remove_if
和erase
的使用很好。您获取输入的方法不是。 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;
}
您可以根据自己的需要进行调整。