close
在C++中並沒有字串(string)的資料型態,而是以字元陣列來實現字串,我們知道下面這個程式是宣告一個字元陣列:
代碼:
char arr[] = {h, e, l, l, o};


在C++中如果在字元陣列最後加上空字元�,就可以用來表示字串,例如下面這個程式就是一個字串的宣告:
代碼:
char str[] = {h, e, l, l, o, �};


C++是使用空字元來識別一個字元陣列是否表示字串,像上例就可以用來表示一個字串hello,在C++中我們也可以這麼宣告字串:
代碼:
char str[] = hello;


在這個例子中,雖然我們沒有指定空字元,但是這個例子中最後程式會自動加上空字元,而它基本上還是字元陣列,與上一個宣告方式是相同的,我們從下面這個程式就可以知道:
代碼:
#include iostream
using namespace std;

int main() {
char str[] = hello;

for(int i = 0; i (sizeof(str)/sizeof(str[0])); i++) {
if(str == �)
cout null;
else
cout str;
}

cout
;

return 0;
}


執行結果:
代碼:
h e l l o null


字串是字元陣列,所以我們可以使用陣列的存取方式取出每一個字元,hello雖然只有5個字元,但是最後會加上一個空字元�,所以str[]共使用了6個字元。

字串一但指定,它的長度就固定了,也就是字元陣列的長度,所以我們要由使用者輸入取得字串值時,需注意不要超過字串的長度;從使用者輸入取得字串值只要這麼作就可以了:
代碼:
char str[80];
cout 輸入字串:;
cin str;
cout 您輸入的字串為 str
;


這個程式片段可以取得使用者的字串輸入,所輸入的字串長度不得超過80個字元,80個字元的上限包括空白字元,所以實際上可以輸入79個字元;如果輸入的字元超出所宣告的上限,相當於存取超出陣列大小的記憶體,會發生不可預期的錯誤。

我們要指定新的字串值給它時,我們不能像下面的方式指定:
代碼:
char str[80];
str = Just;


而必須要一個字元一個字元的指定至陣列中,並在最後加上空白字元,例如:
代碼:
char str[80] = {�};

str[0] = J;
str[1] = u;
str[2] = s;
str[3] = t;
str[4] = �;

cout str
;


這樣的字元指定方式當然相當的不方便,所以C++提供了字串處理的相關函式,例如:
代碼:
strcpy(str1, str2); // str2字串複製給str1字串
strcat(str1, str2); // str2字串串接在str1字串後
strlen(str); // 計算不含空字元的字串長度
strcmp(str1, str2); // 比較兩個字串


下面這個程式是個簡單的示範:
代碼:
#include iostream
#include string
using namespace std;

int main() {

char str1[80] = {�};
char str2[] = caterpillar;

cout str1: str1
str2: str2;

strcpy(str1, str2);
cout

str1: str1
str2: str2;

strcat(str1, str2);
cout

str1: str1
str2: str2;

cout

str1長度: strlen(str1)

str2長度: strlen(str2)

;

cout
str1與str2比較: strcmp(str1, str2)

;

return 0;
}


執行結果:
代碼:
str1:
str2: caterpillar

str1: caterpillar
str2: caterpillar

str1: caterpillarcaterpillar
[justin@caterpiliar sample]$

str1長度:22
str2長度:11

str1與str2比較:1


這 幾個字串處理函式是定義於string.h之中,所以使用時必須將它include進來;strcmp(str1, str2)會比較字串str1與str2的大小,若相同就傳回0,str1大於str2則傳回大於0的值,小於則傳回小於0的值,比較的標準是依字典順序 比對,例如若str1大於str2,表示str1在字典中的順序是在str2之後;strlen()所傳回的字串長度值並不包括空字元,這點必須注意。

如果您使用cin來取得使用者的輸入字串,則您會發現輸入字串時中間不能包括空白,如果您想要在輸入字串時包括空白,您必須使用gets()函式,例如:
代碼:
char str[80];

cout 輸入字串:;
gets(str);
cout 您輸入的字串為: str
;


使用gets()函式時有一點必須注意,就是它並不會檢查使用者的輸入是否超出字元陣列的長度,使用時必須小心,有的編譯器會提示警告訊息。
代碼:
: the `gets function is dangerous and should not be used.


字串的宣告還有指標(pointer)的宣告方式,這個我們留待談到指標時再來說明。
arrow
arrow
    全站熱搜

    天才R 發表在 痞客邦 留言(1) 人氣()