一.
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...