void chapter_9_43(string& s, string& oldval, string& newval) {
string::iterator it1 = s.begin();
for (; it1 <= s.end() - oldval.size() + 1; ++it1) { //遍歷S
if (s.substr(it1 - s.begin(), oldval.size()) == oldval) { //一致性判斷
s.replace(it1-s.begin(), oldval.size(), newval); //替換oldval內容
it1 += oldval.size(); //迭代器移動替換距離
}
}
}
int main(void){
string s = { "abdsxcjkd" };
string oldval = { "sx" };
string newval = { "cccc" };
chapter_9_43(s, oldval, newval);
cout << s << endl;
}
程式的核心思路是在string s中查找是否又跟oldval相同的片段,如果有就替換為newval的內容
我想知道為什么s.substr((it1-s.begin(),oldval.size(())==oldval)這里it1為什么要減去s.begin((),不減去就報錯,但減去的話兩個begin相減為什么會成立呢,求各位懂得大神解答一下疑惑。
uj5u.com熱心網友回復:
it1為什么要減去s.begin((),這樣獲取it1在s中的位置,當前迭代器的位置,相當于地址量相減,獲得相對偏侈uj5u.com熱心網友回復:
懂了,謝謝解答!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/94467.html
標籤:C++ 語言
