在c語言中,用0結尾的字元陣列表示字串,c的字串有乙個問題,就是定義後大小不能改變,存入的內容只能比陣列小,不能大,如果不小心存多了,會引起記憶體的溢位,這個問題讓程式設計師很鬱悶。
c++的string部分的解決了這個問題,它會隨存放字元的長度自動伸縮,程式設計師不必擔心記憶體溢位的問題。string類還和c語言的字串之間可以轉換。
首先,為了在程式中使用string類,必須包含標頭檔案 。如下:
#include
注意這裡不是string.h,string.h是c字串標頭檔案。
string類是乙個模板類,位於std命名空間內,為方便使用還需要在程式中增加:
using namespace std;
建立乙個string字串物件很簡單:
string str;
如果不指定命名空間,也就是說沒有using namespace std,建立字串物件的方法如下:
std::string str;
示例(book215.cpp)
也可以這麼寫:
可以用=直接賦值。
可以用 ==、>、=、<=、和!=比較字串。
可以用+或者+=操作符連線兩個字串。
可以用獲取特定的字元,類似陣列。
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的一些特性:
int size(); // 返回當前字串的大小
int length(); // 返回當前字串的長度
void clear(); // 清空字串
string提供了上百個成員函式,非常豐富,豐富得有點眼花,各位自己找資料,有空的時候再研究一下,斷章取義的使用,注意,是有空的時候。
string
是乙個類,通過動態分配記憶體,實現對字串的儲存,我們來看以下**。
示例(book216.cpp)
執行結果
通過以上的例子,我們可以看到,string物件用於存放字元的記憶體位址是變化的,不是什麼神奇的技術。
c++的string類是乙個變長的字串,不需要程式設計師擔心記憶體溢位的問題,還提供了很多字串操作函式,初學者可能會想,用它取代c語言中的字串(以0結尾的字元陣列)一定是個很好的主意。我要告訴各位,這是不可能的,因為string中的字串儲存的記憶體空間沒有固定的位置(它也沒辦法有固定位置)。
對初學者來說,只會用c和c++寫一些簡單的程式,做一些簡單的事情,不懂得實際開發的需求,例如oracle和mysql資料庫提供的介面,在資料交換的時候需要繫結乙個固定的位址,string是做不到的。
我的建議是採用string存放一些需要動態分配記憶體的臨時資料,避開動態記憶體技術帶來的坑,然後轉換為c的字串。c的字串沒有string類那麼豐富的成員函式,這個不是問題,我們可以自己寫,這也是我不想介紹string成員函式的原因,與其花時間去研究string的成員函式,還不如自己寫乙個。
所以,了解string類的原理和一些用得著的成員函式就可以了,不必太深入研究,意義不大。
如果這篇文章對您有幫助,請點贊支援,或在您的部落格中**我的文章,謝謝!!!
C 語言類的詳解和示例
超女選秀的例子我們玩了很久,為了教學的需要,暫時離開美眉們,我將採用實際專案開發的例子。在c語言基礎知識中已學習過檔案操作,在實際開發中,我會把檔案操作封裝成乙個類,類的宣告如下 類的宣告和成員函式的定義都是類定義的一部分,在實際開發中,我們通常將類的宣告放在標頭檔案中,而將成員函式的定義放在原始檔...
C 中標準類string常用示例
好久沒用過c 了,把常用的資料型別重新熟悉下。string平時用的較少,簡單總結下。include include using std string using std cout using std endl int main 取字串中某個元素 cout str1.at 3 endl for int...
C語言isalpha函式介紹 示例和實現
isalpha函式用於判斷字元是否為字母 a z和a z 在本文中,我們先來介紹isalpha函式的使用方法,然後編寫乙個自定義的 isalpha函式,實現與isalpha函式相同的功能。include int isalpha int c 判斷引數c是否為字母,您可能會問 isalpha函式的引數是...