C++ 字串使用詳解
當我們一開始使用C語言來處理字串的時候,會感覺非常的麻煩。C語言中缺少相應的字串處理函式,如果想要實現某個字串功能,只能靠我們自己來實現。但是當來到C++中,字串的處理就會變得異常簡單。今天我們就來學習一下C++中最高頻的字串處理函式。示例程式碼上傳至:https://github.com/chenyufeng1991/CppString。
首先要引入C++中的字串標頭檔案:
#include <string>
請注意,這裡的標頭檔案是沒有.h的,否則就成了C語言中的標頭檔案了。
(1)建立字串
建立字串有好幾種構造方式,最典型的方式就是使用複製建構函式,
string str("chenyufeng",3); cout << str << endl;
拷貝原先的字串開頭處的3個字元最為最新的字串。列印結果為che.
string str2("chenyufeng",2,3); cout << str2 << endl;
拷貝原先字串index=2開始處的3個字元最為新的字串。列印結果為eny。
// = :字串賦值 str2 = "Robert"; cout << str2 << endl;
同樣也可以用直接賦值的方式為某個變數賦值字串,使用”=“。列印結果為Robert.
(2)swap:交換兩個字串的值
// swap:交換兩個字串的值 string string1 = "chen"; string string2 = "yufeng"; swap(string1, string2); cout << "string1 = " << string1 << ";string2 = " << string2 << endl;
列印結果就已經和原先的字串的值交換了。
(3)+,append :新增字串
// += ,append:在尾部新增字串 string stringOrigin = "chen"; string stringAppend = "yufeng"; stringOrigin = stringOrigin + stringAppend; cout << "stringOrigin = " << stringOrigin << endl; stringOrigin.append("_OK"); cout << "stringOriginAppend = " << stringOrigin << endl;
注意,新增字串操作是會修改原先的字串的。可以直接使用+號進行字串的新增,非常方便。
(4)insert:在指定位置插入字串
// insert:在指定position插入字串 string stringInsertOrigin = "chenyufeng"; stringInsertOrigin.insert(3, "__"); cout << "stringInsertOrigin = " << stringInsertOrigin << endl;
上述程式碼可以在indx=3位置插入__下劃線,列印結果為 che__nyufeng.
(5)erase,clear刪除字串
// erase: 刪除字元 string stringEraseOrigin = "chenyufeng"; stringEraseOrigin.erase(); cout << "stringEraseOrigin = " << stringEraseOrigin << endl; // clear :刪除全部字元 string stringClearOrigin = "chenyufeng"; stringClearOrigin.clear(); cout << "stringClearOrigin = " << stringClearOrigin << endl;
上述操作其實都是把字串清空了。
(6)replace:替換字串
// replace: 替換字串,某個pos位置開始的size個字元替換成後面的“”字串 string stringReplaceOrigin = "chenyufeng"; stringReplaceOrigin.replace(3, 2, "66"); cout << "stringReplaceOrigin = " << stringReplaceOrigin << endl;
上述程式碼把字串從index=3開始的2個字元替換成”66“,列印結果為che66ufeng.
(7)==,< , >, <=, >=: 比較字串大小
C++中使用這種運算子對字串進行操作,其實都是用了運算子過載。字串比較大小是根據字母的字典序或者說是ASCII碼值按順序比較大小。直到比較出兩個字串的不同字母或者比較到某個字串的最後一位停止。
// ==,<,>,<=,>=:比較字串 string stringLeft = "zhen"; string stringRight = "yufeng"; if (stringLeft == stringRight) { cout << "equal" << endl; } if (stringLeft != stringRight) { cout << "not equal" << endl; } if (stringLeft < stringRight) { cout << "stringLeft < stringRight" << endl; } if (stringLeft > stringRight) { cout << "stringLeft > stringRight" << endl; }
(8)size,length:計算字串長度
這裡的計算字串長度和C語言中不同,是不包括末尾的\0的,計算的是真實的長度。
// size(), length():計算字串長度 string stringCount = "chenyufeng"; cout << "stringSize = " << stringCount.size() << endl; cout << "stringLength = " << stringCount.length() << endl;
上述的列印結果都是10.
(9)empty:判斷字串是否為空
// empty():判斷字串是否為空 string stringIsEmpty = ""; string stringNotEmpty = "chen"; if (stringIsEmpty.empty()) { cout << "stringIsEmpty == empty" << endl; } else { cout << "stringIsEmpty != empty" << endl; } if (stringNotEmpty.empty()) { cout << "stringNotEmpty == empty" << endl; } else { cout << "stringNotEmpty != empty" << endl; }
(10)字串的輸入輸出流
// 輸入輸出stream cout << "請輸入一個字串"<<endl; string stringInput; cin >> stringInput; cout << "stringInput = " << stringInput << endl;
字串也可以類似於C++其他資料型別一樣使用輸入輸出流。可以使用Enter鍵結束輸入流。
(11)max_size:字串的最大可容納量。
// max_size: string stringMaxSize; cout << "stringMaxSize = " << stringMaxSize.max_size() << endl;
列印結果為:18446744073709551599 。表示該字串可以容納這麼多的字元數。
(12)[], at :元素存取與修改
// [],at() :元素存取 string stringAt = "chenyufeng"; cout << "stringAt[3] = " <<stringAt[3] << endl; cout << "stringAt.at(3) = " << stringAt.at(3) << endl; stringAt[3] = '6'; stringAt.at(5) = '9'; cout << "stringAt = " << stringAt << endl;
字串可以和陣列一樣進行操作,使用下標進行存取,並可以進行修改原字串。
(13)compare:字串的比較,返回0,1 ,-1。
// compare() string stringCompare = "chenyufeng"; int aaa = stringCompare.compare("chen"); // > 0 int bbb = stringCompare.compare("chenyufeng"); // == 0 int ccc = stringCompare.compare("done"); // < 0 cout << "aaa = " << aaa << ";bbb = " << bbb << ";ccc = " << ccc << endl;
(14)substr:取子字串
// substr string stringSubstr = "chenyufeng"; // 從索引為4開始的3個字元 cout << "stringSubstr.substr(4,3) = " << stringSubstr.substr(4,3) << endl; // 從索引為4開始的所有字元 cout << "stringSubstr.substr(4) = " <<stringSubstr.substr(4) << endl; // 整個字元 cout << "stringSubstr.substr() = " <<stringSubstr.substr() << endl;
(15)find:查詢某個字元
// find string stringFind = "chenyufeng"; stringFind.find('n'); cout << "stringFind.find('n') = " << stringFind.find('n') << endl; cout << "stringFind.find_first_of('e') = " << stringFind.find_first_of('e') << endl; cout << "stringFind.find_last_of('e') = " << stringFind.find_last_of('e') << endl;
預設find函式是返回某個字元第一次出現的下標index。find_first_of和find_last_of則分別是第一次和最後一次出現某個字元的index。
上述15個C++中的字串處理函式是最為常見的,當然其他還有不少,我會在在後續的使用中繼續補充。string其實也是STL中的一部分。關於字串函式的使用更為具體的為官方文件:http://en.cppreference.com/w/cpp/string/basic_string 。
相關文章
- Go各時間字串使用詳解Go字串
- C++ Lambda 表示式使用詳解C++
- C++字串轉整數詳解(安全vs不安全)C++字串
- C++中字串的使用C++字串
- 高效字串匹配演算法——BM 演算法詳解(C++)字串匹配演算法C++
- C++中map的使用詳解說明C++
- 詳解C++引用C++
- C++ Virtual詳解C++
- KMP字串模式匹配詳解KMP字串模式
- jQuery字串擷取詳解jQuery字串
- Javascript之字串拼接詳解JavaScript字串
- C++ stl容器詳解C++
- c++ vector用法詳解C++
- C++堆疊詳解C++
- C++物件模型詳解C++物件模型
- Swift - 字串(String)用法詳解Swift字串
- Linux sed 命令字串替換使用方法詳解Linux字串
- C++分割字串,及strtok函式使用C++字串函式
- C++ 檔案操作詳解C++
- C++ 智慧指標詳解C++指標
- C++引用型別詳解C++型別
- C/C++位元組詳解C++
- c++ 虛繼承詳解C++繼承
- 詳解C++完美轉發C++
- 不再怕面試被考字串---詳解Java中的字串面試字串Java
- 高效遍歷:C++中分隔字串單詞的3種方法詳解與例項C++字串
- MySQL 動態字串處理詳解MySql字串
- 字串(C/C++)字串C++
- c++ 分割字串C++字串
- C++運算子過載詳解C++
- C++中指標與引用詳解C++指標
- 匿名函式(lambda)詳解 C++函式C++
- C++ 中 this 指標的用法詳解C++指標
- c++ 智慧指標用法詳解C++指標
- C++中的容器類詳解C++
- c++建構函式詳解C++函式
- C++函式指標詳解C++函式指標
- 【字串演算法】字典樹詳解字串演算法