所以我查找了各种函数以及从字符串中删除空格的方法,但它们似乎都不适合我。这就是我现在所拥有的:
string filename = filenamet;
//remove all whitespace
//filename.erase(remove(filename.begin(), filename.end(), isspace), filename.end());
其中filenamet是一个字符串变量,和filename一样。我已经仔细检查了我的所有包含,所以它们似乎也不是问题。这是我得到的编译器错误:
test.cpp: In function ‘void input(char*, char**)’:
test.cpp:256:68: error: cannot convert ‘std::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >}’ to ‘const char*’ for argument ‘1’ to ‘int remove(const char*)’ filename.erase(remove(filename.begin(), filename.end(), isspace), filename.end());
我也尝试过remove_if而不删除,但后来我得到了这个编译错误:
test.cpp: In function ‘void input(char*, char**)’:
test.cpp:256:71: error: ‘remove_if’ was not declared in this scope
filename.erase(remove_if(filename.begin(), filename.end(), isspace), filename.end());
非常感谢任何帮助!
答案 0 :(得分:1)
你也可以试试这个:
string::iterator iter = filename.begin();
while ( iter != filename.end() )
{
if ( isspace ( *iter ) )
{
iter = filename.erase ( iter );
}
else
{
iter++;
}
}
我编译并测试了它,所以它应该可以运行。
答案 1 :(得分:1)
请务必仔细阅读错误!
test.cpp: In function ‘void input(char*, char**)’:
test.cpp:256:68: error: cannot convert
‘std::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >}’
to ‘const char*’ for argument ‘1’
to ‘int remove(const char*)’
filename.erase(remove(filename.begin(), filename.end(), isspace), filename.end());
问题是编译器认为您正在调用此std::remove
而不是此std::remove
。我猜这个问题就是你忘记了:
#include <algorithm>
因为否则这一行:
filename.erase(remove(filename.begin(), filename.end(), isspace), filename.end());
是从字符串filename
中删除所有空格的正确方法。
答案 2 :(得分:0)
#include <algorithm>
#include <cctype>
// One of this two:
s.resize(std::remove_if(s.begin(), s.end(), std::isspace) - s.begin());
s.erase(std::remove_if(s.begin(), s.end(), std::isspace), s.end());
std::remove_if(s.begin(), s.end(), std::isspace)
使用s
覆盖s
的前缀,跳过空白字符。它不会改变字符串的大小,所以如果有任何空格,s
的结尾将不受影响并包含可能无用的内容,因此我们使用{{1}修剪它}或std::string::erase
(std::string::resize
将pass-the-end迭代器返回到新内容,我用它来确定要删除的内容/ std::remove_if
的新大小。
答案 3 :(得分:-1)
std::string remove_char(const std::string &input, char to_remove){
std::string output;
for(unsigned i=0; i<input.size(); ++i)
if(input[i]!=to_remove)
output+=input[i];
return output;
}