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成員只允許本類或者子類中訪問,外界無法訪問,定義類時如果希望成員被子類繼承...