C++ STL 容器 string
生活随笔
收集整理的這篇文章主要介紹了
C++ STL 容器 string
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 string
string內部含有一個char*字符串
2 string構造方式
- 無參構造
- 字符串構造
- 拷貝構造
- n個相同字符
3 string賦值操作
可以有以下操作:
void string_test() {string str1;str1 = "str1";cout << "str1 = " << str1 << endl;string str2 = str1;cout << "str2 = " << str2 << endl;string str3 = "a";cout << "str3 = " << str3 << endl;string str4;str4.assign("str4");cout << "str4 = " << str4 << endl;string str5;str5.assign("123456789", 5);cout << "str5 = " << str5 << endl;string str6;str6.assign(str5);cout << "str6 = " << str6 << endl;string str7;str7.assign(10, 'k');cout << "str7 = " << str7 << endl; }結果為:
?
4 string拼接
可以使用的是 ?+= 以及append, 例子如下:
void string_test1() {string str1 = "str1";str1 += "str";cout << "str1 = " << str1 << endl;str1 = "str1";str1 += 's';cout << "str1 = " << str1 << endl;str1 = "str1";string str2 = "str2";str1 += str2;cout << "str1 = " << str1 << endl;str1 = "str1";str1.append("str");cout << "str1 = " << str1 << endl;str1 = "str1";str1.append(str2);cout << "str1 = " << str1 << endl;str1 = "str1";str1.append("abcdefg", 4); //拼前四個字符cout << "str1 = " << str1 << endl;str1 = "str1";str1.append("0123456789", 2, 3); //從第二(從0開始數)個字符開始拼三個字符cout << "str1 = " << str1 << endl;str1 = "str1"; }5 查找和替換
find測試:
void string_find_test() {string str1 = "abcdefg";int position = str1.find("de", 2); //find有兩個參數, 第一個是要查找的字符cout << "position: " << position << endl; //或者子串, 第二個參數是開始查找的位置,position = str1.find("df", 2); //第二個參數的默認值為0,返回值是找到的cout << "position: " << position << endl; //第一個子串起始位置的下標,如果未找到就position = str1.rfind("de", 2); //返回-1, rfind跟find的區別是:rfindcout << "position: " << position << endl; //是從右向左查找. }替換測試:
void string_replace_test() {string str1 = "abcdefg";str1.replace(1, 3, "1111"); //從下標1起, 3個字符替換為"1111"cout << "str1: " << str1 << endl; }6 字符串對比
如下測試代碼:
void string_compare_test() {string str1 = "abcdefg";string str2 = "abcdefg";if (str1.compare(str2) == 0) {cout << "str1 = str2" << endl;} else if (str1.compare(str2) > 0) {cout << "str1 > str2" << endl;} else if (str1.compare(str2) < 0) {cout << "str1 < str2" << endl;} }此時compare是比較字符串的每一位, 如果每一位都想等, 那么就相等, 如果前面的字符的ASCII碼值大于后面的, 那么就返回 >0, 否則小于0. 此時因為str1和str2都是"abcdefg", 所以返回的是0:
當string str1 = "abadefg", string str2 = "abcdefg"時, 結果為:
當string str1 = "abcdefg", string str2 = "abcaefg"時, 結果為:
7 對字符插入刪除操作
如下代碼:
void string_insert_delete_test() {string str1 = "abcdefg";str1.insert(1, "000");cout << str1 << endl;str1.erase(1, 3);cout << str1 << endl; }結果:
8 取子串
void string_substring_test() {string str1 = "abcdefg";string str2 = str1.substr(1, 3);cout << str2 << endl; }結果:
擴展用途如下:
void string_find_test() {string str1 = "xiaoming@163.com";int position = str1.find('@');string username = str1.substr(0, position);cout << "username: " << username << endl; }結果為:
9 字符串分割?strtok_r
函數原型:
char *strtok_r(char *str, const char *delim, char **saveptr);其中:
- char *str? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 被分割字符串(如果傳入NULL, 則直接分割最后一個參數, 也就是saveptr)
- const char *delim? ? ? ? ? ? ? ? 分隔符,也是個字符串指針
- char **saveptr? ? ? ? ? ? ? ? ? ? ?一個供內部使用的指針,用于保存上次分割剩下的字串
總結
以上是生活随笔為你收集整理的C++ STL 容器 string的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u2020 华为_华为MateBook
- 下一篇: leetcode 3 --- 无重复字符