1. 程式人生 > 其它 >C++字串總結

C++字串總結

目錄
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字元將被第二個字串的第一個字元取代。