C++語言指南(十二)——字元序列

來源:互聯網
上載者:User
**************************************************************
原文連結:http://www.cplusplus.com/doc/tutorial/
**********************************************
字元序列

就像你可能已經知道了的那樣,在C++標準庫中實現了一個功能強大的 string(字串)類,它對控制和操作有字元組成的字串非常有用。但是,因為字串實際上是字元序列,我們也可以用普通的 char型數組來保釋它們。


Your Ad Here

例如下面的數組:
char jenny [20];
是一個能最多儲存20個char型元素的數組,它可以被表示為:

因此,在這個數組中在理論上我們可以儲存一個最多包含20個字元的字元序列。但是我們也可以存更短的序列。例如,jenny可以在一個程式中的某處儲存序列“Hello”或序列“Merry Chrismas”,因為它們兩個都少於20個字元。

因此,由於字元數組可以儲存少於其總長度的序列,一個特殊的字元別用來標示有效序列的結束:“Null 字元”(null character),它在字面上被寫為’/0’(反斜線,零)。

我們的有20個char型元素的叫做jenny的數組儲存字元序列“Hello”和“Merry Christmas”可以表述如下:

注意怎樣為了指示序列的結束在序列的末尾加入了 null字元( '/0’)。灰顏色的格表示 char元素的值不確定。 初始化以 null 結尾的序列因為字元數組是普通的數組,因此它們也遵守同普通數組相同的規則。例如,如果我們想用一些提前確定好的字元來初始化一個字元數組,我們可以就像對其它數組那樣完成它:
char myword[] = { 'H', 'e', 'l', 'l', 'o', '/0' };
在這種情況下我們就聲明了一個有6個 char型元素的數組,並且其被初始化為“ Hello”並在結尾附加了一個 null字元’ /0’。但是字元數組由另一個初始化的方法:使用字串。在前面章節我們已經使用的運算式中,表示全部字串的常量已經出現了多次。它們都是被一對雙引號(")括起來的文本。例如:
"the result is: "
就是以惡我們或許已經使用過的一個字串常量。帶雙引號(")的字串是字串常量,它們的類型實際上是 null結尾的字元數組。所以被雙引號括起來的字串常量通常在結尾被自動加入了一個 null字元( '/0’)因此我們可以用下面兩種方法中的任意一種來給叫做myword的字元數組初始化為一個null結尾的序列:
char myword [] = { 'H', 'e', 'l', 'l', 'o', '/0' };char myword [] = "Hello";
在這兩種情況中,字元數組 myword都被聲明為了一個大小為6個 char型元素的數組:其中5個對應單詞“ Hello”再加上一個標示序列結束的終止 null字元(' /0’),在第二種情況中,即使用了雙引號( "), null字元被自動添加。請注意:我們討論的是在一個字元數組在它聲明時被初始化的情形,而不是在它們已經被聲明了之後給它們賦值。事實上因為 null結尾的字元數組的類型是普通的數組,我們有和任何其它數組相同的限制,因此我們不能用一個賦值操作來拷貝資料區塊。假設 mytext是一個 char[]型變數,在一個原始碼中的像這樣的運算式:
mystext = "Hello";mystext[] = "Hello";
將是 無效的,像下面這個一樣:
mystext = { 'H', 'e', 'l', 'l', 'o', '/0' };
這個原因可能在你有了一點更多的關於指標的知識後會更清楚,因為到那時就會很清晰:一個數組實際上是一個指向一個記憶體塊的常量指標。 使用以 null 結束的字元序列以null結尾的字元序列是在C++中處理字串的普通方法,因此它們像在很多程式中那樣使用。事實上,通常的字串有這個類型( char[])也用於很多地方。例如,cin和cout支援以null結尾的序列為有效字元序列的容器,因此它們可以被直接用於從cin中提取字串或向cout中插入字串。例如:

// null-terminated sequences of characters#include <iostream>using namespace std; int main (){ char question[] = "Please, enter your first name: "; char greeting[] = "Hello, "; char yourname [80]; cout << question; cin >> yourname;

 cout << greeting << yourname << "!";

 return 0;}

Please, enter your first name: JohnHello, John!
就像你看到的,我們聲明了3個字元數組。前兩個被用字串常量初始化,而第三個沒有被初始化。在任何情況下,我們都必須指明數組的大小:頭兩個( questiongreeting)的大小是根據初始化它們的字串常量來定義的。而對於 yourname我們則進行了顯式的說明:它的大小是80個 char。最後,儲存在數組中的字元序列能夠和容易的通過賦值運算子轉換成string對象:
string mystring;char myntcs[]="some text";mystring = myntcs;
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.