STL使用問題記錄

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;
}

結果如下:
在這裏插入圖片描述

如果覺得文章對你有用,右側邊欄給個打賞吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章