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