c 複習要點總結z之十二 STL string

2021-07-11 06:04:05 字數 4319 閱讀 5873

1string概念

²  string是stl的字串型別,通常用來表示字串。而在使用string之前,字串通常是用char*表示的。string與char*都可以用來表示字串,那麼二者有什麼區別呢。

string和char*的比較

²  string是乙個類, char*是乙個指向字元的指標。

string封裝了char*,管理這個字串,是乙個char*型的容器。

²  string不用考慮記憶體釋放和越界。

string管理char*所分配的記憶體。每一次string的複製,取值都由string類負責維護,不用擔心複製越界和取值越界等。

²  string提供了一系列的字串操作函式(這個等下會詳講)

查詢find,拷貝copy,刪除erase,替換replace,插入insert

2string的建構函式

²  預設建構函式:

string();       //構造乙個空的字串string s1。

²  拷貝建構函式:

string(const string &str);         //構造乙個與str一樣的string。如strings1(s2)。

²  帶引數的建構函式

string(const char *s);    //用字串s初始化

string(int n,char c);    //用n個字元c初始化

3string的訪問字元操作

²  string類的字元操作:

const char &operator (int n) const;

const char &at(int n) const;

char &operator (int n);

char &at(int n);

²  operator和at()均返回當前字串中第n個字元,但二者是有區別的。

主要區別在於at()在越界時會丟擲異常,在剛好越界時會返回(char)0,再繼續越界時,編譯器直接出錯。如果你的程式希望可以通過try,catch捕獲異常,建議採用at()。

4從string取得const char*的操作

²  const char *c_str() const;  //返回乙個以'\0'結尾的字串的首位址

5把string拷貝到char*指向的記憶體空間的操作

²  int copy(char *s, int n, int pos=0) const; 

把當前串中以pos開始的n個字元拷貝到以s為起始位置的字元陣列中,返回實際拷貝的數目。注意要保證s所指向的空間足夠大以容納當前字串,不然會越界。

6string的長度

int length() const;   //返回當前字串的長度。長度不包括字串結尾的'\0'。

bool empty() const;     //當前字串是否為空

7string的賦值

string &operator=(const string&s);//把字串s賦給當前的字串

string &assign(const char *s); //把字串s賦給當前的字串

string &assign(const char *s, int n);//把字串s的前n個字元賦給當前的字串

string &assign(const string&s);  //把字串s賦給當前字串

string &assign(int n,char c);  //用n個字元c賦給當前字串

string &assign(const string &s,intstart, int n);  //把字串s中從start開始的n個字元賦給當前字串

8string字串連線

string &operator+=(const string&s);  //把字串s連線到當前字串結尾

string &operator+=(const char *s);//把字串s連線到當前字串結尾

9string的比較

int compare(const string &s)const;  //與字串s比較

int compare(const char *s) const;   //與字串s比較

compare函式在》時返回 1,《時返回 -1,==時返回 0。比較區分大小寫,比較時參考字典順序,排越前面的越小。大寫的a比小寫的a小。

10string的子串

string substr(int pos=0, int n=npos)const;    //返回由pos開始的n個字元組成的子字串

11string的查詢和 替換

查詢int find(char c,int pos=0) const;  //從pos開始查詢字元c在當前字串的位置

int find(const char *s, int pos=0)const;  //從pos開始查詢字串s在當前字串的位置

int find(const string &s, int pos=0)const;  //從pos開始查詢字串s在當前字串中的位置

find函式如果查詢不到,就返回-1

int rfind(char c, int pos=npos) const;   //從pos開始從後向前查詢字元c在當前字串中的位置

int rfind(const char *s, int pos=npos)const;

int rfind(const string &s, intpos=npos) const;

//rfind是反向查詢的意思,如果查詢不到, 返回-1

替換string &replace(int pos, int n, constchar *s);//刪除從pos開始的n個字元,然後在pos處插入串s

string &replace(int pos, int n, conststring &s);  //刪除從pos開始的n個字元,然後在pos處插入串s

void swap(string &s2);    //交換當前字串與s2的值

//4

字串的查詢和替換

void main25()

strings1 = "wbm hello wbm 111 wbm 222 wbm 333";

size_tindex = s1.find("wbm", 0);

cout<< "index: " << index;

//求itcast出現的次數

size_toffindex = s1.find("wbm", 0);

while(offindex != string::npos)

cout<< "在下標index: " << offindex << "找到wbm\n";

offindex= offindex + 1;

offindex= s1.find("wbm", offindex);

//替換

strings2 = "wbm hello wbm 111 wbm 222 wbm 333";

s2.replace(0,3, "wbm");

cout<< s2 << endl;

//求itcast出現的次數

offindex= s2.find("wbm", 0);

while(offindex != string::npos)

cout<< "在下標index: " << offindex << "找到wbm\n";

s2.replace(offindex,3, "wbm");

offindex= offindex + 1;

offindex= s1.find("wbm", offindex);

cout<< "替換以後的s2:" << s2 << endl;

12string的區間刪除和插入

string &insert(int pos, const char *s);

string &insert(int pos, const string&s);

//前兩個函式在pos位置插入字串s

string &insert(int pos, int n, charc);  //在pos位置 插入n個字元c

string &erase(int pos=0, intn=npos);  //刪除pos開始的n個字元,返回修改後的字串

13string演算法相關

void main27()

strings2 = "aaabbb";

transform(s2.begin(),s2.end(), s2.begin(), toupper);

cout<< s2 << endl;

strings3 = "aaabbb";

transform(s3.begin(),s3.end(), s3.begin(), tolower);

cout<< s3 << endl;

C 複習要點總結之八 繼承一

一 不同的繼承方式會改變繼承成員的訪問屬性 public 修飾的成員變數 方法 在類的內部和外部都可以使用。protected 修飾的成員變數 方法在類的內部使用,在繼承的子類中使用,類的外部不能使用。是為了在家族中使用,為了得到繼承!private 修飾的成員變數 方法 只能在類的內部使用,不能在...

c 複習要點總結之九 繼承二

一 繼承中的同名成員變數處理方法 1 當子類成員變數與父類成員變數同名時 2 子類依然從父類繼承同名成員 3 在子類中通過作用域分辨符 進行同名成員區分 在派生類中使用基類的同名成員,顯式地使用類名限定符 4 同名成員儲存在記憶體中的不同位置 繼承和static關鍵字在一起會產生什麼現象哪?理論知識...

C 複習要點總結之 友元

在c 中,類的成員訪問許可權有三種,private,protected,public。private 類中的private成員只能夠在本類中或者友元訪問,子類或外界無法訪問私有成員。protected 類中的protected成員只允許本類或者子類中訪問,外界無法訪問,定義類時如果希望成員被子類繼承...