我试图通过在c ++中使用字符串头中的函数rtrim()
来修剪字符串,而不使用算法
我做的是检查开始和结束位置,如果存在空间,只需使用isspace()
删除它,但是当我编译时,现在我收到此错误:
'std :: string&类型的非const引用的无效初始化{aka std :: basic_string&}'来自'const char *'
类型的右值
这是我的代码:
#include <iostream>
#include <string>
using namespace std;
string rtrim(string& s) {
size_t i;
for(i = s.length() - 1; i != (size_t)-1; i--) {
if(!(isspace(s[i]))){
break;
}
}
return s.substr(0, i + 1);
}
int main(){
cout << "|" << rtrim(" hello world\t ") << "|" << endl;
}
每当我设置string s = ( "hello world\t ");
之类的参数并运行cout << rtrim(s) << endl;
似乎都有效但它不像上面的代码一样工作。有什么建议吗?
答案 0 :(得分:0)
上面的代码将在堆栈上创建std::string
的临时对象,并将其作为非const引用传递给函数。这很危险,因为函数可以修改对象(没有意义)或记住对象的引用,并在对象被破坏后尝试将其修改到其范围之外。
在您的功能中,您实际上不需要non-const
引用,因此只需将参数更改为const std::string &s
即可。