1. string使用erase方法刪除指定字符出錯
在使用string容器的erase刪除字符方法時,嘗試瞭如下代碼
#include<iostream>
using std::cout;
using std::endl;
using std::string;
int main() {
string str = "abcdefghijklmnopqrstuvwxyz0123456789";
str.erase('b');
cout << str << endl;
}
代碼編譯通過,想着以爲能刪除掉’b’字符,沒想到運行失敗了。
調試發現異常是越界。瞭解到erase方法是不能根據傳入字符,就刪除這個字符的。只能通過下標或迭代器刪除,此處之所以編譯通過,是因爲把字符’b’轉爲對應ASCII十進制的98了。運行時去找下標98,但字符串沒有那麼長,因此產生了中斷。
論證, 當運行下面代碼,就發現可以了。
#include<iostream>
using std::cout;
using std::endl;
using std::string;
int main() {
string str = "abcdefghijklmnopqrstuvwxyz0123456789";
//'!'對應ASCII十進制的33,此處會刪除下標33及之後的內容
str.erase('!');
cout << str << endl;
}
結果如下: