歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++處理字符串的方法—字符串類與字符串變量

C++處理字符串的方法—字符串類與字符串變量

日期:2017/3/1 9:38:01   编辑:Linux編程

用字符數組來存放字符串並不是最理想和最安全的方法。

C++提供了一種新的數據類型——字符串類型(string類型),在使用方法上,它和char、int類型一樣,可以用來定義變量,這就是字符串變量——用一個名字代表一個字符序列。

實際上,string並不是C++語言本身具有的基本類型,它是在C++標准庫中聲明的一個字符串類,用這種類可以定義對象。每一個字符串變量都是string類的一個對象。

字符串變量的定義和引用

1) 定義字符串變量
和其他類型變量一樣,字符串變量必須先定義後使用,定義字符串變量要用類名string。如:
string string1; //定義string1為字符串變量
string string2=″China″; //定義string2同時對其初始化
應當注意:要使用string類的功能時,必須在本文件的開頭將C++標准庫中的string頭文件包含進來,即應加上
#include <string> //注意頭文件名不是string.h

2) 對字符串變量的賦值
在定義了字符串變量後,可以用賦值語句對它賦予一個字符串常量,如:
string1=″Canada″;
既可以用字符串常量給字符串變量賦值,也可以用一個字符串變量給另一個字符串變量賦值。如:
string2=string1; //假設string2和string1均已定義為字符串變量
不要求string2和string1長度相同,假如string2原來是″China″,string1原來是″Canada″,賦值後string2也變成″Canada″。在定義字符串變量時不需指定長度,長度隨其中的字符串長度而改變。

可以對字符串變量中某一字符進行操作,如:
string word=″Then″; //定義並初始化字符串變量word
word[2]=′a′; //修改序號為2的字符,修改後word的值為″Than″

3) 字符串變量的輸入輸出
可以在輸入輸出語句中用字符串變量名,輸入輸出字符串,如:
cin>> string1; //從鍵盤輸入一個字符串給字符串變量string1
cout<< string2; //將字符串string2輸出

字符串變量的運算

在上一節中可以看到: 在以字符數組存放字符串時,字符串的運算要用字符串函數,如strcat(連接)、strcmp(比較)、strcpy(復制),而對string類對象,可以不用這些函數,而直接用簡單的運算符。

1) 字符串復制用賦值號
string1=string2;
其作用與“strcpy(string1,string2);”相同。

2) 字符串連接用加號
string string1=″C++″; //定義string1並賦初值
string string2=″Language″;//定義string2並賦初值
string1=string1 + string2;//連接string1和string2
連接後string1為″C++ Language″。

3) 字符串比較直接用關系運算符
可以直接用 ==(等於)、>(大於)、<(小於)、!=(不等於)、>=(大於或等於)、<=(小於或等於)等關系運算符來進行字符串的比較。

字符串數組

不僅可以用string定義字符串變量,也可以用string定義字符串數組。如:
string name[5]; //定義一個字符串數組,它包含5個字符串元素
string name[5]={″Zhang″, ″Li″, ″Fun″, ″Wang″, ″Tan″}; //定義一個字符串數組並初始化

此時name數組的狀況如圖5.11所示。


圖5.11


關於字符串數組的幾點說明:

  • 在一個字符串數組中包含若干個(現為5個)元素,每個元素相當於一個字符串變量。
  • 並不要求每個字符串元素具有相同的長度,即使對同一個元素而言,它的長度也是可以變化的,當向某一個元素重新賦值,其長度就可能發生變化。
  • 在字符串數組的每一個元素中存放一個字符串,而不是一個字符,這是字符串數組與字符數組的區別。如果用字符數組存放字符串,一個元素只能存放一個字符,用一個一維字符數組存放一個字符串。
  • 每一個字符串元素中只包含字符串本身的字符而不包括′\0′。


可見用字符串數組存放字符串以及對字符串進行處理是很方便的。

在定義字符串數組時怎樣給數組分配存儲空間呢?實際上,編譯系統為每一個字符串變量分配4個字節,在這個存儲單元中,並不是直接存放字符串本身,而是存放字符串的地址。在本例中,就是把字符串″Zhang″的地址存放在name[0],把字符串″Li″ 的地址存放在name[1],把字符串″Fun″的地址存放在name[2]……圖5.11只是一個示意圖。在字符串變量中存放的是字符串的指針(字符串的地址)。

C++ 設計新思維》 下載見 http://www.linuxidc.com/Linux/2014-07/104850.htm

C++ Primer Plus 第6版 中文版 清晰有書簽PDF+源代碼 http://www.linuxidc.com/Linux/2014-05/101227.htm

讀C++ Primer 之構造函數陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm

讀C++ Primer 之智能指針 http://www.linuxidc.com/Linux/2011-08/40177.htm

讀C++ Primer 之句柄類 http://www.linuxidc.com/Linux/2011-08/40175.htm

將C語言梳理一下,分布在以下10個章節中:

  1. Linux-C成長之路(一):Linux下C編程概要 http://www.linuxidc.com/Linux/2014-05/101242.htm
  2. Linux-C成長之路(二):基本數據類型 http://www.linuxidc.com/Linux/2014-05/101242p2.htm
  3. Linux-C成長之路(三):基本IO函數操作 http://www.linuxidc.com/Linux/2014-05/101242p3.htm
  4. Linux-C成長之路(四):運算符 http://www.linuxidc.com/Linux/2014-05/101242p4.htm
  5. Linux-C成長之路(五):控制流 http://www.linuxidc.com/Linux/2014-05/101242p5.htm
  6. Linux-C成長之路(六):函數要義 http://www.linuxidc.com/Linux/2014-05/101242p6.htm
  7. Linux-C成長之路(七):數組與指針 http://www.linuxidc.com/Linux/2014-05/101242p7.htm
  8. Linux-C成長之路(八):存儲類,動態內存 http://www.linuxidc.com/Linux/2014-05/101242p8.htm
  9. Linux-C成長之路(九):復合數據類型 http://www.linuxidc.com/Linux/2014-05/101242p9.htm
  10. Linux-C成長之路(十):其他高級議題

Copyright © Linux教程網 All Rights Reserved