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”。