07.11 C++字符串

與C語言一樣,在C++的基本數據類型變量中沒有字符串變量。那麼如何存儲和處理字符串數據呢?在C語言中是使用字符型數組來存放字符串的,C++程序中也仍然可以用這種方法。不僅如此,標準C++庫中還預定義了string類。今天就來介紹這兩種方法。

C++字符串

用字符串存儲和處理字符串

字符串變量是一對雙引號括起來的字符序列。例如:"abcd","China",都是字符串常量。它在內存中的存放形式是,按串中字符的排列次序順序存放,每個字符佔一個字節,並在末尾添加'\\0'作為結尾標記。這實際上是一個隱含創建的類型為char的數組,一個字符串常量就表示這樣一個數組的首地址。因此,可以把字符串常量賦給字符串指針,由於常量值是不能改的,應將字符串常量賦給指向常量的指針,例如:

const char *STRING1="This is a string";

這時,可以直接對STRING1進行輸出,例如:

cout<<string>

字符變量也可以用類似的方式表示。如果創建一個char數組,每個元素存放字符串的一個字符,在末尾放置一個'\\0',便構成C++字符串。它的儲存方式與字符串常量無異,但由於它是程序員創建的數組,因此可以改寫其內容,因而這就是字符串變量而非常量了。這時候要注意,用於存放字符串的數組其元素個數應該不小於字符串的長度(字符串個數)加一。對字符數組進行初始化賦值時,初值的形式可以是以逗號分隔的ASCII碼或字符常量,也可以是整體的字符串常量(這時末尾的

'\\0'是隱含的)。下面列出的語句都可以創建一個初值為“program”的字符串變量,3種寫法是等價的。

char str[8]={'p','r','o','g','r','a','m','\\0'};

char str[8]="program";

char str[ ]="program";

儘管對用字符數組表示的字符串進行初始化還比較容易、直觀,但進行許多其他字符串操作時卻比較麻煩。執行很多字符串操作需要藉助cstring頭文件中的字符串處理函數。

另外,當字符串長度很不穩定時,需要用new來動態創建字符數組,最後還要用delete釋放,這些都相當繁瑣。C++對這些繁瑣的操作進行了封裝,形成了string類,可以更加方便地操作字符串。

C++字符串

string類

使用數組來存放字符串,調用系統函數來處理字符串,會感覺不太方便,而且數據與處理數據的函數分離也不符合面向對象方法的要求。為此,C++標準庫將面向對象的串的概念加入到C++語言中,預定義了字符串類(string類)。string類提供了對字符串進行處理所需要的操作。使用string類需要包含頭文件string。string類封裝了串的屬性並提供了一系列允許訪問這些屬性的函數。

細節:嚴格來說,string並非一個獨立的類,而是類模板basic_string的一個特化實例。不過對於string的使用者來說,它的特點與一個類無異,因此可以把它當作一個類來看待。

下面簡要介紹一個string類的構造函數、幾個常用的成員函數和操作。為了簡明起見,函數原型是經過簡化的,與頭文件的形式不完全一樣。

string(); //默認構造函數,建立一個長度為0的串

string(const string& rhs); //賦值構造函數

string(const char *s); //用指針s所指向的字符串常量初始化string類的對象

string(const string& rhs,unsigned int pos,unsigned int n);

//將對象rhs中的串從位置pos開始取n個字符,用來初始化string類的對象

//注:串中的第一個字符的位置為0

string (const char *s,unsigned int n);

//用指針s所指向的字符串中的前n個字符初始化string類的對象

string (unsigned int n,char c);

//將參數c中的字符重複n次,用來初始化string類的對象

提示:由於string類具有接收const char*類型的構造函數,因此字符串常量和用字符數組表示的字符串變量都可以隱含地轉換為string對象。例如:可以直接使用字符串常量對string對象初始化:

string str="Hello world!";

C++字符串


string類還有一些小知識,比如:操作符和常用成員函數。這些將放在明天8點更新,記得關注哦。


分享到:


相關文章: