日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ STL 容器 string

發布時間:2024/7/23 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ STL 容器 string 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 string

string內部含有一個char*字符串

2 string構造方式

  • 無參構造
string str;
  • 字符串構造
string str("abcd");
  • 拷貝構造
  • n個相同字符
string str(10, 'k'); //初始化為10個k

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。