在C語言中,用0結尾的字元數組表示字元串,C的字元串有一個問題,就是定義後大小不能改變,存入的内容隻能比數組小,不能大,如果不小心存多了,會引起記憶體的溢出,這個問題讓程式員很郁悶。
C++的string部分的解決了這個問題,它會随存放字元的長度自動伸縮,程式員不必擔心記憶體溢出的問題。string類還和c語言的字元串之間可以轉換。
string的聲明
首先,為了在程式中使用string類,必須包含頭檔案 <string>。如下:
#include <string>
注意這裡不是string.h,string.h是C字元串頭檔案。
string類是一個模闆類,位于std命名空間内,為友善使用還需要在程式中增加:
using namespace std;
建立一個string字元串對象很簡單:
string str;
如果不指定命名空間,也就是說沒有using namespace std,建立字元串對象的方法如下:
std::string str;
示例(book215.cpp)

也可以這麼寫:
string的重載的操作符
可以用=直接指派。
可以用 ==、>、<、>=、<=、和!=比較字元串。
可以用+或者+=操作符連接配接兩個字元串。
可以用[]擷取特定的字元,類似數組。
最重要的一個成員函數
const char *c_str();
傳回一個以NULL結尾的c字元串,即c_str()函數傳回一個指向正規C字元串的指針, 内容與本string串相同,用于string轉const char*。
std::string str1;
str1="hello world";
char str2[31];
strcpy(str2,str1.c_str());
string特性描述函數
可用下列函數來獲得string的一些特性:
int size(); // 傳回目前字元串的大小
int length(); // 傳回目前字元串的長度
void clear(); // 清空字元串
string的其它成員函數
string提供了上百個成員函數,非常豐富,豐富得有點眼花,各位自己找資料,有空的時候再研究一下,斷章取義的使用,注意,是有空的時候。
string的本質
string是一個類,通過動态配置設定記憶體,實作對字元串的存儲,我們來看以下代碼。
示例(book216.cpp)
運作結果
通過以上的例子,我們可以看到,string對象用于存放字元的記憶體位址是變化的,不是什麼神奇的技術。
應用經驗
C++的string類是一個變長的字元串,不需要程式員擔心記憶體溢出的問題,還提供了很多字元串操作函數,初學者可能會想,用它取代C語言中的字元串(以0結尾的字元數組)一定是個很好的主意。我要告訴各位,這是不可能的,因為string中的字元串存儲的記憶體空間沒有固定的位置(它也沒辦法有固定位置)。
對初學者來說,隻會用C和C++寫一些簡單的程式,做一些簡單的事情,不懂得實際開發的需求,例如Oracle和MySQL資料庫提供的接口,在資料交換的時候需要綁定一個固定的位址,string是做不到的。
我的建議是采用string存放一些需要動态配置設定記憶體的臨時資料,避開動态記憶體技術帶來的坑,然後轉換為C的字元串。C的字元串沒有string類那麼豐富的成員函數,這個不是問題,我們可以自己寫,這也是我不想介紹string成員函數的原因,與其花時間去研究string的成員函數,還不如自己寫一個。
是以,了解string類的原理和一些用得着的成員函數就可以了,不必太深入研究,意義不大。
版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的連結。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果這篇文章對您有幫助,請點贊支援,或在您的部落格中轉發我的文章,謝謝!!!
如果文章有錯别字,或者内容有誤,或其他的建議或意見,請您留言指正,非常感謝!!!