1、C字符串 c++
c字符串是char類型的數組。char str[MAX] 編程
1.在c++中並無內置的機制保證程序不會出現數組元素個數超出數組大小的狀況。 數組
cout<<setw(MAX)<<str; setw指定輸入緩衝區容許的最大字符個數,用戶即便輸入了過多的字符,<<運算符也不會把他放到數組中。 app
2.cin.get():來讀取包含空格的文本。這樣的語法表示stream類的成員函數get(),而cin是這個類的對象。 函數
cin.get()的第一個參數是存放輸入字符串的數組地址; spa
第二個參數是指定了數組的最大尺寸,所以自動防止了緩衝區超出限制。 對象
第三個參數是能夠攜帶一個字符,告訴函數遇到後就中止讀取,默認是換行字符(\n)。 內存
strlen():獲得c字符串的長度,頭文件cstring; ci
strcpy(destination,source):複製字符串。 字符串
strcat():這個庫函數將第二個參數的字符串加到第一個參數的字符串以後。
3.字符串數組:stringarray[ ][ ]
例如 star[DAYS][MAX]={「sunday」,」monday」,」tuesday」,」wendnesday」,」thursday」,」friday」,」saturday」};
這個數組的第一維DAYS表示數組中有多少個字符串;第二維MAX指定字符串的最大長度。
訪問一個具體字符串的語法爲:star[j]----只有第一維的下標。
注意:
1)MAX的定義是非比尋常的。若是要與封裝的思想保持一致,則定義徹底在類中使用的常量是最好的,所以爲了達到這個目的使用全局變量是不恰當的。標準的C++能夠在類中聲明MAX:
static const int MAX =10 ;
有些編譯器不支持,能夠表示爲:enum {MAX=10};
2)堆棧,內存是向下增加的,所以棧頂在低端,單元以相反的順序從堆棧中彈出:先進後出,後進先出。
2、標準的C++string類1.string對象的定義:
string類的構造函數:
string(const char *s); //用c字符串s初始化
string(int n,char c); //用n個字符c初始化
此外,string類還支持默認構造函數和複製構造函數,如string s1;string s2="hello";都是正確的寫法。當構造的string太長而沒法表達時會拋出length_error異常
1)string s(「man」); 2)string s=」man」; 3)string s;(空的string變量)
2.經常使用成員函數:1) swap():它的功能是將兩個字符串對象的值作調換,一個對象調用它,另外一個對象做爲它的參數。如 s1.swap(s2);
2)getline():在string類中它可以讀取帶有空格的多行輸入。
getline()的第一個參數是流對象,這裏將會出現輸入信息,在此處是cin。
第二個參數是放置文本的string對象obj;
第三個參數是指定終止輸入的字符,默認爲換行符」\n「.
getline()與c字符串的函數get()是類似的,只是前者是string標準。
string類的輸入輸出操做:
string類重載運算符operator>>用於輸入,一樣重載運算符operator<<用於輸出操做。
函數getline(istream &in,string &s);用於從輸入流in中讀取字符串到s中,
以換行符' '分開。
3)find():在調用它的字符串對象中查找做爲參數的字符串,(最左邊的字符位置的編號是0)。
find_frist_of():查找全部的字符組,而且返回他找到的第一個字符的位置。如:find_frist_of(「spde」)爲查找這些字符」s「、」p「、」d「、」e「中在字符串中第一個出現的字符,而且返回該字符所在的值。
find_frist_not_of():查找第一個不屬於所給出的字符組的字符,並返回該字符的位置。
4)erase():將子串從字符串中移除。
第一個參數:子串第一個字符所在的位置。
第二個參數:子串的長度。
5)replace():用一個字符串替換另外一個字符串。
第一個參數:置換部分的起始位置;
第二個參數:要替代的原來字符串的字符個數;
第三個參數:用來替換的字符串。
6)insert():將第二個參數指定的字符串插到第一個參數提供的位置。
7)append():在句尾添加字符(’’),不是字符串。
第一個參數:要添加的字符個數;
第二個參數:要添加的字符。
8)compare():兩個對象作比較,返回int類型數值(-1,0,1)。如 a.compare(0,2,b,0,2)
第一個參數:調用函數的對象字符串中開始的位置(0)
第二個參數:調用字符串比較的字符個數(2)
第三個參數:要比較的字符串(b)
第四個參數:b中的開始位置(0)
第五個參數:b字符串中要比較的字符個數(2)
9)substr():返回調用它的字符串的子串。
第一個參數:開始字符位置
第二個參數:返回字符的個數
10)at():相似於[]來從對象中取出單獨的字符。參數爲字符串中字符的位置。
*11)copy:將string對象複製爲char類型的數組。實際上把string類編程c字符串。但記住:複製以後須要將一個空字符(’\0’)插入最後一個字符以後,char[lengeh]=0或char[length]=’\0’;
對比:在string類中:=至關於c字符串中的複製的做用,而copy是將string對象複製爲char類型的數組。
12)length和size做用同樣,都是返回字符串的長度。(size爲適應STL而產生)
C++string類經常使用函數
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函數提供範圍檢查,當越界時會拋出out_of_range異常,下標運算符[]不提供檢查訪問。
const char *data()const;//返回一個非null終止的c字符數組
const char *c_str()const;//返回一個以null終止的c字符串
int copy(char *s, int n, int pos = 0) const;//把當前串中以pos開始的n個字符拷貝到以s爲起始位置的字符數組中,返回實際拷貝的數目
string的特性描述:
int capacity()const; //返回當前容量(即string中沒必要增長內存便可存放的元素個數)
int max_size()const; //返回string對象中可存放的最大字符串的長度
int size()const; //返回當前字符串的大小
int length()const; //返回當前字符串的長度
bool empty()const; //當前字符串是否爲空
void resize(int len,char c);//把字符串當前大小置爲len,並用字符c填充不足的部