std string replace使用小計

2021-06-12 04:53:36 字數 1011 閱讀 7820

ctrl+c / ctrl+v 真是害死人,看起來簡單的東西,往往卻又很容易出問題

究其原因,還在於只知其表不知其裡,容易想當然。

今天遇到的問題是簡單呼叫string::replace替換子串的問題,如:

std::string stest1 = "12x567890";

std::string stest2 = stest1;

std::string ssub = "x";

std::string srepl = "34";

int index = stest1.find(ssub.c_str());

stest1.replace(index, index+strlen(ssub.c_str()), srepl); // stest1 == "12347890" 錯誤,按這種方式抄了下用法

index = stest2.find(ssub.c_str());

stest2.replace(index, index+strlen(ssub.c_str()), srepl.c_str()); // stest2 == "12347890" 錯誤

// stest2.replace(index, strlen(ssub.c_str()), srepl.c_str()); // stest2 == "1234567890" 正確

以上stest2的結果不是想要的,其原因在於函式過載,第三個引數型別不一樣前兩個引數含義是不一樣的。

檢視replace實現原始碼,其功能注釋是很清楚的。

看來太習慣於隱式型別轉換,如const char* -> string ,不是什麼好習慣。

***************====寫到這裡,我發現還在犯錯誤

標準std::string::replace,stest1替換的語法應該是通不過的而我能通過是因為用的stlport代替標準庫。。。

VI使用小技巧

1 替換某一字串 s old word new word g 在整個檔案中將old word替換為new word 2 不進入vi編輯器將檔案中的某一字串替換掉 sed s 111 aaa g 1.txt 2.txt 將1.txt中所有的111替換為aaa,修改後的檔案寫入2.txt sed s 1...

IDE使用小技巧

vc 共享樂園 1 如何檢測程式中的括號是否匹配。把游標移動到需要檢測的括號 如大括號 方括號 圓括號 和尖括號 前面,鍵入快捷鍵 ctrl 如果括號匹配正確,游標就跳到匹配的括號處 否則游標不移動,並且機箱喇叭還會發出一聲警告聲。2 如何檢視乙個巨集 或變數 函式 的巨集定義。選中此巨集,單擊滑鼠...

libiconv使用小例子

最近用到一點轉碼的東西,在網上搜到乙個libiconv,使用了一下感覺還可以,不過還是有一兩處容易犯錯的地方,除錯了半天才搞明白,此處是乙個將utf 8轉換為gbk的小例子 std string convfromutf8 std string s size t inlen s.size const ...