STL string(典型操作demo)

2021-07-03 16:13:48 字數 4619 閱讀 2943

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。如string s1(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,int start, int n); //把字串s中從start開始的n個字元賦給當前字串

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, int pos=npos) const;

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

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

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

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

12string的區間刪除和插入

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

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

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

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

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

demo

#include #include #include #include using namespace std;

// string的初始化

void initstring()

// 遍歷string

void ergodic()

cout << endl;

// 2迭代器方式

for (string::iterator it = s.begin(); it != s.end(); it++)

cout << endl;

// 3at()方法

trycout << endl;

} catch (...)

cout << endl;

// 如果用下標,程式直接就中止了

/* try

cout << endl;

} catch (...)

*/}// 字元指標和string的轉換

void char2string()

; s.copy(buf, 3, 0); // 注意,只copy3個字元,不會變成c風格的字串

cout << "buf: " << buf << endl;

cout << endl;

}// string的連線

// string查詢和替換

void stringfindandreplace()

// 把s中的lucifer替換成大寫

offindex = s.find("lucifer", 0);

while (offindex != string::npos)

cout << "after replace: " << s << endl;

cout << endl;

// after replace: lucifer hello lucifer 111 lucifer 222 lucifer 333

}// 截斷(區間刪除)和插入

void stringdelete()

cout << "after delete 'l': " << s << endl;

// after delete 'l': helo lucifer hello

s.erase(s.begin(), s.end()); // 全部刪除

cout << "after delete all: " << s << endl;

// after delete all:

string s2 = "zhang";

s2.insert(0, "lucifer"); // 頭插法

cout << "after insert: " << s2 << endl;

// after insert: luciferzhang

s2.insert(s2.length(), "hello"); // 尾插法

cout << "after insert: " << s2 << endl;

// after insert: luciferzhanghello

cout << endl;

}void stringtransform()

int main()

作業系統典型排程演算法

在作業系統中存在多種排程演算法,其中有的排程演算法適用於作業排程,有的排程演算法適用於程序排程,有的排程演算法兩者都適用。下面介紹幾種常用的排程演算法。一 先來先服務 fcfs 排程演算法 fcfs排程演算法是一種最簡單的排程演算法,該排程演算法既可以用於作業排程也可以用於程序排程。在作業排程中,演...

資料和操作典型異常場景 2

資料異常類 配置資料 介面資料 db 資料 檔案資料 沒有獲取到配置資料 配置資料取值不合法 配置資料取值超出範圍 配置檔案超大 超過5m 配置檔案丟失 輸入引數不符合介面定義契約 介面字段超出取值範圍 非系統識別訊息 超大訊息包 收到重複請求訊息 請求訊息接受響應異常 查詢結果集超大 查詢結果集為...

ecmall乙個典型的操作

獲取使用者資料 user this visitor get user mod m member user user mod get info user user id user portrait portrait user user id info portrait middle user last...