STL string類的使用總結

2021-10-02 04:38:00 字數 3869 閱讀 4390

圖為string常用介面。

string的構造

容量操作

元素訪問操作

元素修改操作

關於字串特殊操作

迭代器

string的4種常見的構造方式

string()

string(const char*)

string(size_t , char)

string(string)

#include

using

namespace std;

#include

intmain()

1.size() 與capacity()

size()表示當前容器有效元素的個數 capacity()表示當前容器的總大小

string s

("12345");

s.size()

;//此時有效元素個數為 5

s.capacity()

;//此時容量為 15

s.clear()

;//清空所有有效元素

s.size()

;//此時有效元素個數為 0

s.capacity()

;//此時容量還是 15

s.clear()只清空有效字元,底層容量的大小不變

2.resize() 與reserve()

resize(n)修改當前有效元素的個數到n個

1.如果n小於現有元素個數,則將n個後元素捨去

2.resize(n,char c)如果n大於現有個數,則超出的部分用字元c填充

string s

("12345");

s.resize(10

,『?』);//往後新增 5個? 最終的字串為 12345?????

s.resize(3

);//縮小到 3個元素 最終字串 123

resize修改的是有效元素個數,不會修改底層容量的大小,但如果對字串後填充操作時,如果超過當前底層容量的大小,則底層字串容量會自動擴容1.5到2倍reserve(n)修改底層容量的大小,不影響有效元素的個數

string s

("12345");

s.reserve(20

);//此時 capacity為 31

s.reserve(10

);//此時 capacity為 15

reserve(),如果對容量進行擴充,修改的容量不一定與給定的容量相同,容量的改變有自己的修改機制。

如果對容量進行縮小,該函式不會執行,除非容量小於15時,返回15

1.下標訪問與a()

與陣列用法相同,通過[ ] 可以訪問下標位置的元素 或者通過at(),訪問相應位置的元素

string s

("abcde")s[

1];//訪問字元 'b's[0

]='1';

//通過賦值修改相應下標位置的元素

s.at(2

);//訪問字元 'c'

二者如果訪問越界都會發生異常。但異常處理不相同,下標訪問越界,出發assert斷言,at()訪問越界,丟擲out_of_range異常同樣都是尾插元素

string s1;

s1.push_back

(『i』)

;s1+

=" love "

;//此時s1內容為 "i love "

string s2

("you");

//s1向後追加string類字串s2

s1+=s2;

//此時s1的內容為 "i love you" s2還是"you"

s1.(1,

',')

;// 向後新增乙個 字元 ','

s1.(

"abc");

//向後追加c風格的字串

追加的有效元素一旦超過當前的底層容量大小,則string類會對容量進行自動擴容,擴容機制按照大概1.5倍擴容

3.insert()插入元素

可以在指定位置插入

char型別字元,

const char*字串,

string型別字串。

string s

("abcde");

s.insert(2

,'0');

//在下標2後插入字元'0' s為"abc0de"

4.c_str()轉換為c風格字串

string內部c_str() 可以將當前

string型別字串轉換為c風格的

const char*字串。

string s

("12345");

//atoi函式可以將字串中的數字轉換為相同的整形

int ret =

atoi

(s.c_str)

;//使用atoi需將 string類轉化為c風格字串

5.find()和rfind()查詢元素

find() 從起始位置開始找需要查詢的元素,並返回查詢後匹配的第乙個位置

rfind()從最後的位置開始查詢。如果位找到則返回npos

string s

("hello world");

size_t pos = s.

find

(' ');

if(pos!= string::npos)

pos = s.

find

("world");

//也可以查詢string型別的元素

//應用find() 尋找檔案字尾 abc.txt

string s2

("abcde.txt"

)pos = s2.

rfind

('.')+

1;//pos位置後就是字尾的位置

6.substr() 擷取字串

傳遞兩個引數,第乙個引數為,從字串哪個位置開始擷取

第二個引數為,向後擷取多少位,預設擷取到字串末尾

string s2

("abcde.txt"

)pos = s2.

rfind

('.')+

1;//pos位置後就是字尾的位置

string s3;

s3 = s2.

substr

(pos,3)

;//從pos位置向後擷取3位,取得字尾

迭代器可以當作指標理解。string::iterator

1.迴圈遍歷string中元素的3種方法

string s

("hello");

//通過for each迴圈

for(

auto e:s)

//通過s.size()獲取長度

for(

int i =

0;isize()

;i++

)//通過iterator迭代器

string::iterator it = s.

begin()

;//從s起始位置開始

while

(it!=s.

end())

學習總結 STL string

標頭檔案 宣告 string x x為變數名 函式 getline cin,x 預設以換行符為終點 getline cin,x,以 為終點 標頭檔案 宣告 istringstream x x為變數名,初始化操作為istringstream x 1 23 4 ostringstream x 定義乙個輸...

STL string用法總結

參考自 1 string物件的定義和初始化以及讀寫 string s1 預設建構函式,s1為空串 string s2 s1 將s2初始化為s1的乙個副本 string s3 valuee 將s3初始化乙個字串面值副本 string s4 n,c 將s4 初始化為字元 c 的n個副本 cin s5 讀...

C 模擬實現STL string類

前面部落格 stlstring類相關介面介紹 中對string的介面進行了詳細的介紹和測試,下面我們將對這些介面進行模擬實現,若有疑問可參考前面的部落格。標頭檔案string.h pragma once include include include include using namespace ...