1. 程式人生 > >C++ 字串類,字串變數與字串陣列

C++ 字串類,字串變數與字串陣列

但是這種方式存在一些弊端,比如字元陣列的大小是固定的,在進行字元連線或字元複製時,需要計算字串與字元陣列的長度,否則就可能發生一部分字元超出陣列範圍。

為此,C++提供了一種新的資料型別——字串型別(string),實際上在C++的基本資料型別中並不包含string,他是在C++標準庫中宣告的一個字串類,用這個類實現字串的定義。

在定義string型變數時,需要加上#include <string>的標頭檔案。
注意:不是string.h,因為該標頭檔案為C語言的,並沒有string型別,具體的介紹在上文連結中有。

定義與賦值

使用字串類後,可以直接使用string型別定義字串,此時string與C++基本資料型別(int,double等)相比並沒有區別。
定義並初始化:

string str="chaibubble";

先定義後初始化:

string str1;
str1 ="chaibubble";

利用字元陣列時,可以這樣定義和初始化一個字串:

char str2[11] = "chaibubble";

但是先定義後初始化是錯誤的

char str3[11];
str3 ="chaibubble";

因為str3不是字串變數,而是陣列名。

字串型別操作
在使用字元陣列時,我們需要用各種操作函式實現字串操作,比如strcat等,但是應用字串類後,可以使用簡單的運算子即可完成操作。

        string str1="chai"
; string str2; str2 ="bubble"; string str3 =str2; string str4 =str1+str3; if (str3==str2) { cout<<"str3==str2"<<endl; } if (str1!=str2) { cout<<"str1!=str2"<<endl; } if
(str1>str2) { cout<<"str1>str2"<<endl; }

在上面的程式中可以看到,複製直接使用“=”,連線使用“+”,關係運算使用==(等於),>(大於),<(小於),!=(不等於),>=(大於等於)。這是因為在string標頭檔案中已經對這些運算子進行了過載,使他們能用於string類物件的運算

其中大於或小於的比較與字串比較函式 strcmp 的功能是相同的,大小的依據是直到出現第一個不同的字元時,比較該字元的ASCII碼大小。

字串陣列

既然string型別與基本資料型別沒什麼區別,那麼也可以用string定義字元數字。

string shuzu[4] = {str1,str2,str3,str4};

注意:
(1)一個字串陣列中可以包含若干個元素,每一個元素相當於一個字串變數。
(2)並不要求元素都有相同的長度。
(3)字串陣列中的每一個元素的值只包含字串本身的字元而不包括“\0”。