我是C++新手。我知道有一個std::remove
方法來刪除字符串中的字符,但是有沒有一種remove_at
方法可以讓我刪除字符串中某個索引處的字符?例如,C++中有字符串的removeAt函數嗎?
string s = "aBcDeF";
s = s.remove_at(4).remove_at(2);
會導致
"aBDF"
是否有標準庫函數來做到這一點?
我是C++新手。我知道有一個std::remove
方法來刪除字符串中的字符,但是有沒有一種remove_at
方法可以讓我刪除字符串中某個索引處的字符?例如,C++中有字符串的removeAt函數嗎?
string s = "aBcDeF";
s = s.remove_at(4).remove_at(2);
會導致
"aBDF"
是否有標準庫函數來做到這一點?
該方法被稱爲erase
。下面是一個示範程序
#include <iostream>
#include <string>
int main()
{
std::string s = "aBcDeF";
s.erase(4, 1).erase(2, 1);
std::cout << s << std::endl;
}
程序輸出是
aBDF
考慮到在其中方法被調用的順序。當然,你可以將這一個呼叫分成兩個分開的呼叫。
例如
s.erase(2, 1);
s.erase(3, 1);
如果neded創建一個新的字符串,你可以簡單地初始化這一個新的字符串。例如
std::string t = s;
t.erase(2, 1);
t.erase(3, 1);
我認爲這很好,但它會從原始字符串中刪除字符,而不是返回一個新字符。對不明確的關於不變性的含義很抱歉;我會更新我的問題來反映。 –
如何自己創建這個新的修改過的字符串?沒有什麼困難 – LBes
@JamesKo'string s2 = s;',並修改s2? – deviantfan
std::string::remove
有一個重載,它獲取要刪除的角色位置以及要從該位置移除的字符數量。所以你的代碼基本上
s.remove(4,1).remove(2,1);
http://www.cplusplus.com/reference/string/string/erase/
第一個重載會做你想要什麼。 std :: string有很多有用的方法,我相信沒有太多的人可以記住它們。便於參考:http://www.cplusplus.com/reference/string/string/
的std :: basic_string的 ::抹去 –
BlamKiwi
我猜閱讀文檔太難了。 –