string.erase()--已解决

在代码中需要实现这样一个功能,需要将[00000001]这个存储在string中的字符串的中括号去掉,首先想到的就是string.erase()这个函数。结果。。。

代码:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 void strSize()
 7 {
 8     string strTest = "[0000-0001]";
 9     strTest.erase(strTest.size() - 1);
10     strTest.erase(0);
11 }
12 
13 void strLength()
14 {
15     string strTest = "[0000-0001]";
16     strTest.erase(strTest.length() - 1);
17     strTest.erase(0);
18 
19     cout << strTest << endl;
20 }
21 
22 void strIterator()
23 {
24     string strTest = "[0000-0001]";
25     strTest.erase(strTest.begin());
26     strTest.erase(strTest.end() - 1);
27 }
28 
29 int main(int argc, char *argv)
30 {
31     strIterator();
32 
33     return 0;
34 }

这段代码中一共有三个函数进行测试,却只有一个可用,strIterator

其他两个总是会提示段错误。而且,跟踪调试发现,使用过erase后,strTest的size就变为0了。

待以后自己知识足够了再来解决。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

问题解决了:

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 // 去处头部或者尾部的空白
 6 void trimStr(string &str)
 7 {
 8     int nHeadPos = 0;
 9     int nTailPos = 0;
10 
11     nHeadPos = str.find_first_not_of(' ', 0);
12     str.erase(0, nHeadPos);
13     nTailPos = str.find_last_not_of(' ');
14     str.erase(nTailPos + 1);
15 }
16 
17 int main(int argc, char **argv)
18 {
19     string strTest = "  hello  ";
20     trimStr(strTest);
21 
22     return 0;
23 }

原因是因为我把string::erase()的用法用错了。下面是它的三个重载版本

1 string& erase (size_t pos = 0, size_t len = npos);    
2 
3 iterator erase (iterator p);
4 
5 iterator erase (iterator first, iterator last);

参考:http://www.cplusplus.com/reference/string/string/erase/

根据它的定义可以知道,第一个是删除从指定下标开始len个字符的字符串。不指定则删除到结尾。(这就是我用错的原因,我以为可以删除指定下标出的字符,当然,如果长度指定为1也是可以的。)

而通过迭代器可以,是因为第二个重载版本的存在,它的作用是删除迭代器指向的字符。

第三个是删除两个迭代器之间的字符

虽然这个错误很低级,但是通过这次的错误,也让我更加了解了这个函数的使用。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

加油吧,少年!

原文地址:https://www.cnblogs.com/lit10050528/p/4064677.html