上一講雞啄米講了動態內存分配和釋放的內容,今天要講的是字符串,是編程入門必須要掌握牢的內容之一。

       在編程系列之四(數據類型)中雞啄米說過,字符串是用雙引號括起來的字符序列。比如,"China”。字符串常量會在字符序列末尾添加'\0'作為結尾標記。字符串在內存中按照串中字符的排列順序存放,并在末尾會添加'\0'作為結尾標記。對于ASCII碼來說每個字符占一個字節,而對Unicode碼來說每個字符占兩個字節。本教程只講ASCII編碼的字符和字符串。

       C++和C一樣,基本數據類型的變量中沒有字符串變量,那怎樣處理字符串的存儲和操作呢?C語言中用字符數組存放字符串,操作同一般數組類似。C++語言繼承了這種方式。除此之外,標準C++庫中還定義了string類。這一講主要說下怎樣通過字符數組的方式存儲和操作字符串,string類的相關內容下一講會講到。

       一.字符數組的聲明和使用

       字符數組的聲明和使用方法和其他類型的數組是一樣的。聲明字符數組的語法形式為:

       char 字符數組名[下標表達式1][下標表達式2]...;

       雞啄米給大家一個有關字符數組聲明和使用的簡單例子:

        #include <iostream>
        using namespace std;
        int main()
        {
               char str[10] = {'I', ' ','l','o','v','e',' ','y','o','u' };        // 聲明和初始化一維字符數組str
               int i;
               for (i=0; i<10; i++)
               {
                       cout << str[i];
               }
               cout << endl;
               return 0;
        }

       程序運行結果:

        I love you

雞啄米:C++編程入門系列之三十二(數組、指針和字符串:用字符數組存放和處理字符串)

       二.字符串用字符數組存放和處理

       上面的例子中定義了字符數組并逐個處理數組中的元素,但存儲的并不是字符串,因為結尾沒有結束標記'\0'。如果我們在對字符數組進行初始化賦值時,末尾添加了'\0'就構成了字符串,但是用來存放字符串的數組的元素個數應該大于等于字符串的長度加1。為字符數組初始化賦值時,初值可以是用逗號分隔的字符常量或ASCII碼,也可以是字符串常量。對于字符串常量,結尾不用顯式添加'\0',‘\0’是隱式包含的。

       雞啄米根據上述幾種為字符數組初始化賦值的方式,分別列舉幾個例子:

       char str[5] = {108,111,118,101,0};             // 以逗號分隔的ASCII碼為字符數組初始化賦值
       char str[5] = {'l','o','v','e','\0'};                          // 以逗號分隔的字符常量為字符數組初始化賦值
       char str[5] = "love";                                        // 以字符串常量為字符數組初始化賦值

       字符串用字符數組存放時,我們可以按照上面的例程中逐個字符處理和輸出,還可以將整個字符串一次性輸入或者輸出。例如:

       一次性輸入:char str[5];          cin >> str;
       一次性輸出:char str[5]="love";   cout << str;

       將字符串一次性輸入或輸出時我們要注意:1.對于字符串結尾標記'\0',輸出字符串不會輸出。2.輸入多個字符串時需要用空格分隔,若要輸入單個字符串則不能有空格,否則會被認為是多個字符串。3.輸出字符串時,輸出參數是字符數組名,遇到'\0'時輸出結束。

       雞啄米舉例說明下以上三點:

       1.char str[5]="love"; cout << str;。字符串"love"的結尾隱含'\0',輸出時只會輸出"love"而不會輸出'\0'。
       2.char str1[5],str2[5],str3[5]; cin >> str1 >> str2 >> str3;程序執行時輸入"I love you",則字符串str1、str2和str3分別被賦值"I"、"love"和"you"。如果改為char str[11]; cin >> str;程序執行時輸入"I love you",則str被賦值為"I"。因為'I'后輸入了空格,被認為是多個字符串,str只用空格前的子字符串賦值。
       3.輸出字符串時cout參數只寫字符數組名就可以了,比如cout << str就可以輸出str字符串,遇到'\0'時輸出結束。                                                                                                                                                            

       我們可以使用庫中的字符串處理函數來處理字符串,比如,strcat用來連接兩個字符串,strcpy用來拷貝字符串,strcmp用來進行字符串的比較,strlen用來計算字符串的長度。使用這些函數之前需要先包含頭文件string.h。至于這些函數的詳細說明和用法可以在vs2010的msdn中查詢。

       雞啄米今天就講到這里了,主要講了用字符數組存儲和操作字符串的方法,下一講再講標準C++庫中的string類。大家有問題可以來雞啄米博客留言交流。

 

除非特別注明,雞啄米文章均為原創
轉載請標明本文地址:http://www.cpbsu.com/software/88.html
2011年11月19日
作者:雞啄米 分類:軟件開發 瀏覽: 評論:14