圖為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 ...