问题
写LeetCode 第8题的时候,遇到了这个问题.

原因
str.erase(0, str.find_first_not_of(' '));
str.assign(str.begin(),str.begin() + str.find_first_of(' '));
由于需要去除字符串的前后干扰字符 比如 " -42 with word",我需要得到-42这个数,就需要去除前面的空格,所以采用了erase的方法,然后截取到非空格的地方.
但是 find_first_of()方法可能找不到空格,那该方法就会返回std::string::npos
其实最主要是C++标准未提供截取字符串的方法.而是提供了最基本的find操作.
by the way : npos的定义
static const size_type npos = -1;
解决
先通过 find_first_of()判断下是不是存在要找的部分
if(str.find_first_of(' ')!=std::string::npos){
str.assign(str.begin(),str.begin() + str.find_first_of(' '));
}
本质

其实本质问题(合理的猜测)是:assgin方法不可以assign(s.begin(),s.begin()-1),这需要读下源码.(至少LeetCode的编译器是这样的,因为我用g++编译是没有问题的,也不抛异常).而erase方法可以这样调用erase(0,-1);

也排除了begin()-1的访问.

所以基本可以肯定是assign的问题
本文探讨了使用C++处理字符串时遇到的常见问题,特别是如何正确去除字符串前后的空白字符,避免使用str.assign和str.erase方法时可能出现的错误。文章详细分析了find_first_of和find_first_not_of方法的正确用法,并提供了有效的解决方案。
1万+

被折叠的 条评论
为什么被折叠?



