对std:string如何去除前后的空格
发布网友
发布时间:2022-04-28 15:38
我来回答
共2个回答
热心网友
时间:2022-06-19 11:40
s自身的内存 在结束后 会直接释放
问题是strp开辟内存 这样做是没法释放的。
C++和C尽量不要混用。
其实 用string s=是没必要用strp的
比如 存在char a[]="test"
要生成新的 直接string s=a;
这样就可以了。
strp是C的
需要
char *p=strp(a);
使用后, 需要 free(p);
热心网友
时间:2022-06-19 11:41
同事原先找了个:
std::string trim(string& str)
{
string::size_type pos = str.find_last_not_of(' ');
if(pos != string::npos)
{
str.erase(pos + 1);
pos = str.find_first_not_of(' ');
if(pos != string::npos) str.erase(0, pos);
}
else
str.erase(str.begin(), str.end());
return str;
}
不过还有更精巧的实现,我找到如下的:
// trim from start
static inline std::string <rim(std::string &s) {
s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
return s;
}
// trim from end
static inline std::string &rtrim(std::string &s) {
s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
return s;
}
static inline std::string &trim(std::string &s) {
return ltrim(rtrim(s));
}