C++字符串總結

[TOC] C++處理字符串的方式有兩種。第一種來自C語言,常被稱爲C-風格字符串(C-style string)。另一種基於string類庫。

字符數組

存儲在連續字節中的一系列字符意味着可以將字符串存儲在char數組中,其中每個字符都位於自己的數組元素中。 C-風格字符串具有一種特殊的性質:以空字符(null character)結尾,空字符被寫作\0,其ASCII碼爲0,用來標記字符串的結尾。

#include<iostream>
using namespace std;

int main()
{
	char a[8] = { 'a','b','c','d','e','f','g','h' };
	char b[8] = { 'a','b','c','d','e','f','g','\0' };

	cout << a << endl;
	cout << b << endl;
	return 0;
}

這兩個數組都是char數組,但只有第二個數組是字符串。空字符對C-風格字符串而言至關重要。 C++有很多處理字符串的函數,其中包括cout使用的那些函數。它們都逐個地處理字符串中的字符,直到到達空字符爲止。 如果使用cout顯示上面的b這樣的字符串,則將顯示前7個字符,發現空字符後停止。但是,如果使用cout顯示上面的數組a(它不是字符串),cout將打印出數組中的8個字母,並接着將內存中隨後的各個字節解釋爲要打印的字符,直到遇到空字符爲止。由於空字符(實際上是被設置爲0的字節)在內存中很常見,因此這一過程將很快停止。但儘管如此,還是不應將不是字符串的字符數組當作字符串來處理。

字符串常量

除了以上這種方法(使用大量單引號,且必須記住加上空字符)之外,還有一種更好的、將字符數組初始化爲字符串的方法—只需使用一個用引號括起的字符串即可,這種字符串被稱爲字符串常量。 如下所示:

char c[8] = "abcdefg";
char d[] = "abcdefg";

用引號括起的字符串隱式地包括結尾的空字符,因此不用顯式地包括它。當然,應確保數組足夠大,能夠存儲字符串中所有字符—包括空字符。使用字符串常量初始化字符數組是這樣的一種情況,即讓編譯器計算元素數目更爲安全。讓數組比字符串長沒有什麼害處,只是會浪費一些空間而已。這是因爲處理字符串的函數根據空字符的位置,而不是數組長度來進行處理。C對字符串長度沒有限制。 字符串常量與字符常量 注意,字符串常量(使用雙引號)不能與字符常量(使用單引號)互換。字符常量(如'S')是字符串編碼的簡寫表示。在ASCII系統上,'S'只是83的另一種寫法。但"S"不是字符常量,它表示的是兩個字符(字符S和\0)組成的字符串。"S"實際上表示的是字符串所在的內存地址。 字符串常量的拼接 有時候,字符串很長,無法放到一行中。C允許拼接字符串字面值,即將兩個用引號括起的字符串合併爲一個。事實上,任何兩個由空白(空格、製表符和換行符)分隔的字符串常量都將自動拼接成一個。 因此,下面所有的輸出語句都是等效的:

cout << "abcde" "fghijk\n";
cout << "abcdefghijk\n";
cout << "abcdefg"
	"hijk\n";

注意,拼接時不會在被連接的字符串之間添加空格,第二個字符串的第一個字符將緊跟在第一個字符串的最後一個字符(不考慮\0)後面。第一個字符串中的\0字符將被第二個字符串的第一個字符取代。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章