String類基礎知識總結

2021-10-06 17:39:03 字數 3604 閱讀 2658

一.

1.1 c語言中的字串

c語言中,字串是以"\0"結尾的一些字元的集合,為了操作方便,c標準庫中提供了一些str系列的庫函式,但是這些庫函式與字串是分離開的,不太符合oop的思想,而且底層空間需要使用者自己管理,稍不留神可能還會越界訪問.

1.2 string類

總結:string是表示字串的字串類

該類的介面與常規容器的介面基本相同,再新增一些專門用來操作string的常規操作

string在底層實際是:basic_string模板類的別名,typedef basic_stringstring

不能操作多位元組或者變長字元的序列

注意:在使用string類時,必須包含#include標頭檔案以及using namespace std;

二.string類的常用介面說明

(一) string類物件的常見構造(構造乙個字串)

函式名稱

介面說明

string()

構造空的string類物件,即空字串

string(const char* s)

用c-string 來構造string類物件

string(size_t n,char c)

string類物件中包含n個字元c

string(const string& s)

拷貝建構函式

void test()
(二) string類物件的容量操作

函式名稱

介面說明

size()

返回字串的有效字元長度

length()

返回字串有效字元長度

capacity()

返回空間總大小

empty()

檢測字串是否為空串,是返回true,否則返回false

clear()

清空字串

reserve()

為字串預留空間

resize()

將有效字元的個數改為n個,多出的空間用字元c填充

void test2()
void test3()
void test4() 

//pj版string 增容過程: 如果為空字串物件,初始容量大小為15,第一次增容2倍,後續按照1.5倍增容

注意:

size()與length()方法底層實現原理完全相同,引入size()的原因是為了與其它容器的介面保持一致,一般情況下基本都是用size();

clear()只是將string中有效字元清空,不改變底層空間大小;

resize(size_t n) 與 resize(size_t  n,char c)都是將字串中有效個數改變到n個,不同的是當字元個數增多時:resize(n)用0來填充多出的元素空間,resize(size_t n,char c)用字元c來填充多出的元素空間.注意:resize在改變元素個數時,如果是將元素個數增多,可能會改變底層容量的大小,如果是將元素個數減小,底層空間大小不變.

reserve(size_t n):為string預留空間,不改變有效元素個數,當reserve的引數小於string的底層空間總大小時,reverse不會改變容量大小.

(三) string類物件的訪問及遍歷操作

迭代器:訪問容器元素的一種通用方式,所有支援迭代器的容器,其迭代器的使用方式完全相同.

迭代器的使用方式:類似於指標的使用方式,可以通過解引用獲取元素內容,可以通過++,--進行位置移動.

begin迭代器:第乙個元素的位置

end迭代器: 最後乙個元素的下乙個位置

迭代器的範圍左閉右開: [begin,end)

函式名稱

功能說明

operator

返回pos位置的字元,const string類物件呼叫

begin+end

begin獲取乙個字元的迭代器+end獲取最後乙個字元的下乙個位置的迭代器

rbegin+rend

rbegin獲取乙個字元的迭代器+rend獲取最後乙個字元的下乙個位置的迭代器

範圍for

c++11支援更簡潔的範圍for的新遍歷方式

void test5() 

cout << endl;

//反向迭代器

string::reverse_iterator rit = str.rbegin();

while (rit != str.rend())

cout << endl;

}void test6()

cout << endl;

string::const_reverse_iterator crt = str.crbegin();

while (crt != str.crend())

cout << endl;

}

void test7() 

cout << endl;

//operator遍歷:可讀可寫介面,如果越界,則非法訪問

for (int i = 0; i < str.size(); ++i)

cout << endl;

//operator簡寫:

for (int i = 0; i < str.size(); ++i)

cout << endl;

//at:可讀可寫,但是可讀性不強,如果越界,則丟擲異常

for (int i = 0; i < str.size(); ++i)

cout << endl;

//範圍for:支援讀寫, 如果需要修改,則接收型別為引用型別

//底層通過迭代器實現

for ( auto& ch : str)

cout << endl;

}

(四) string類物件的修改操作

函式名稱

介面說明

push_back

在字串後尾插字元c

在字串後追加乙個字串

operator+=

在字串後面追加字串str

c_str

返回c格式字串

find+npos

從字串pos位置開始往後找字元c,返回該字元在字串中的位置

rfind

從字串pos位置開始往前找字元c,返回該字元在字串中的位置

substr

在str中從pos位置開始,擷取n個字元,然後將其返回

void test8()
void test9()
(五) string類非成員函式

函式名稱

介面說明

operator+

盡量少用,因為傳值返回,導致深拷貝效率低

operator>>

輸入運算子過載

operator<<

輸出運算子過載

getline

獲取一行字串

relational operators

大小比較

void test10()

String類基礎知識

1 string類的構造方法 1 string string original 把字串資料封裝成字串物件 2 string char c 把字元陣列的資料封裝成字串物件 3 string char c,int index,int count 把字元陣列中的一部分資料封裝成字串物件 示例 1 publ...

string的基礎知識

include include include include using namespace std bool cmp string a,string b 從大到小排列 intmain sort sb,sb 5,cmp 從大到小排列 s abs string的賦值 strcpy ss,abs c語...

C 面試基礎知識總結 類

訪問控制和封裝 友元名字查詢與類的作用域 類的靜態成員與普通成員 在成員函式中,可以直接訪問資料成員,而在這個過程中實際上隱式地使用了乙個名為this的隱式指標,該指標指向正是這個類物件。include using namespace std struct people int main int a...