C 字串操作詳解(整理)

2021-08-11 10:10:55 字數 4269 閱讀 6861

尊重並感謝原創。

選用c++標準程式庫中的string類,是因為他和c-string比較起來,不必擔心記憶體是否足夠、字串長度等等,而且作為乙個類出現,他整合的操作函式足以完成我們大多數情況下(甚至是100%)的需要。我們可以用 = 進行賦值操作,== 進行比較,+ 做串聯(是不是很簡單?)。

首先,為了在我們的程式中使用string型別,我們必須包含標頭檔案 。如下:

#include //注意這裡不是string.h string.h是c字串標頭檔案

1.定義和構造初始化(參考百科,自己動手體會用法)

宣告乙個字串變數很簡單:

string str;

這樣我們就宣告了乙個字串變數,但既然是乙個類,就有建構函式和析構函式。上面的宣告沒有傳入引數,所以就直接使用了string的預設的建構函式,這個函式所作的就是把str初始化為乙個空字串。string類的建構函式和析構函式如下:

a) string s; //生成乙個空字串s

b) string s(str) //拷貝建構函式 生成str的複製品

c) string s(str,stridx) //將字串str內「始於位置stridx」的部分當作字串的初值

d) string s(str,stridx,strlen) //將字串str內「始於stridx且長度頂多strlen」的部分作為字串的初值

e) string s(cstr) //將c字串作為s的初值

f) string s(chars,chars_len) //將c字串前chars_len個字元作為字串s的初值。

g) string s(num,c) //生成乙個字串,包含num個c字元

h) string s(beg,end) //以區間beg;end(不包含end)內的字元作為字串s的初值

i) s.~string() //銷毀所有字元,釋放記憶體

測試如下:

# include 

# include

using

namespace

std;

int main()

; string str5 = ch_music; // = roly-poly

string str6 (ch_music); // = roly-poly

string str7 (ch_music,4); // = roly

string str8 (10,'i'); // = iiiiiiii

string str9 (ch_music+5, ch_music+9); // = poly

str9.~string();

//coutreturn

0;}

2.字串操作函式

這裡是c++字串的重點

1) =,assign() //賦以新值

「=」的用法不作詳細說明,assign用法如下:

# include 

# include

using

namespace

std;

int main()

2) swap() //交換兩個字串的內容

用法如下:

# include 

# include

using

namespace

std;

int main()

4) insert() //插入字元**

在string中間的某個位置插入字串,可以用insert()函式,這個函式需要指定乙個安插位置的索引,被插入的字串將放在這個索引的後面。

s.insert(0,」my name」);

s.insert(1,str);

這種形式的insert()函式不支援傳入單個字元,這時的單個字元必須寫成字串形式。注意:為了插入單個字元,insert()函式提供了兩個對插入單個字元操作的過載函式:insert(size_type index,size_type num,chart c)和insert(iterator pos,size_type num,chart c)。其中size_type是無符號整數,iterator是char*,所以,這麼呼叫insert函式是不行的:insert(0,1, 』j』);這時候第乙個引數將轉換成哪乙個呢?所以必須這麼寫:insert((string::size_type)0,1,』j』)!第二種形式指出了使用迭代器安插字元的形式,在後面會提及。順便提一下,string有很多操作是使用stl的迭代器的,他也盡量做得和stl靠近。

5) erase() //刪除字元**

s.erase(13);//從索引13開始往後全刪除

s.erase(7,5);//從索引7開始往後刪5個

6) clear() //刪除全部字元**

用法不作說明;

7) replace() //替換字元**

string s=」il8n」;

s.replace(1,2,」nternationalizatio」);//從索引1開始的2個替換成後面的

c_string s = internationalization

8) + //串聯字串**

9) ==,!=,<,<=,>,>=,compare() //比較字串

c ++字串支援常見的比較操作符(>,>=,<,<=,==,!=),甚至支援string與c-string的比較(如 str<」hello」)。在使用》,>=,<,<=這些操作符的時候是根據「當前字元特性」將字元按字典順序進行逐一得比較。字典排序靠前的字元小,比較的順序是從前向後比較,遇到不相等的字元就按這個位置上的兩個字元的比較結果確定兩個字串的大小。

另乙個功能強大的比較函式是成員函式compare()。他支援多引數處理,支援用索引值和長度定位子串來進行比較。他返回乙個整數來表示比較結果,返回值意義如下:0-相等 >0-大於 <0-小於。舉例如下:

string s(「abcd」);

s.compare(「abcd」); //返回0

s.compare(「dcba」); //返回乙個小於0的值

s.compare(「ab」); //返回大於0的值

s.compare(s); //相等

s.compare(0,2,s,2,2); //用」ab」和」cd」進行比較小於零

s.compare(1,2,」bcx」,2); //用」bc」和」bc」比較。

10) size(),length() //返回字元數量

現有的字元數,函式是size()和length(),他們等效。

11) max_size() //返回字元的可能最大個數???

max_size() 這個大小是指當前c++字串最多能包含的字元數,很可能和機器本身的限制或者字串所在位置連續記憶體的大小有關係。我們一般情況下不用關心他,應該大小足夠我們用的。但是不夠用的話,會丟擲length_error異常

12) empty() //判斷字串是否為空

empty()用來檢查字串是否為空。

13) capacity() //返回重新分配之前的字元容量

capacity()重新分配記憶體之前 string所能包含的最大字元數。

14) reserve() //保留一定量記憶體以容納一定數量的字元

這個函式為string重新分配記憶體。重新分配的大小由其引數決定,預設引數為0,這時候會對string進行非強制性縮減。

15) [ ], at() //訪問單一字元

可以使用下標操作符和函式at()對元素包含的字元進行訪問。但是應該注意的是操作符並不檢查索引是否有效(有效索引0~str.length()),如果索引失效,會引起未定義的行為。而at()會檢查,如果使用 at()的時候索引無效,會丟擲out_of_range異常。

string str1 = "iphone 5";

cout

<2]cout

<4)string stuff;

getline(cin,stuff); // 輸入一行字元賦值給stuff

getline(cin,stuff,'!'); // 輸入一行字元以「!」結束

cout

<# include using namespace std;

int main()

getchar();

return

0; //輸出aq

}

22) rbegin() rend() //逆向迭代器

23) get_allocator() //返回配置器

C 字串操作整理

標準c 提供了叫做string的新類,該類在多個方面改善了傳統的c字串。雖然字串類還不是stl中的一部分,但是c 也將其視為乙個容器,幾乎所有適合容器的演算法都能操作string物件。如果要使用string類時,應在程式中包含標頭檔案。string類很龐大,含有很多建構函式 成員函式和操作符。我們可...

C 字串操作詳解

選用c 標準程式庫中的string類,是因為他和c string比較起來,不必擔心記憶體是否足夠 字串長度等等,而且作為乙個類出現,他整合的操作函式足以完成我們大多數情況下 甚至是100 的需要。我們可以用 進行賦值操作,進行比較,做串聯 是不是很簡單?首先,為了在我們的程式中使用string型別,...

C語言字串操作函式整理

整理c語言字串相關的函式,以程式方式驗證,以注釋方式做說明。1 include2 include 3 include4 intmain 5102 103 功能 分解字串為一組字串。s 為要分解的字串,delim 為分隔符字串。104說明 首次呼叫時,s 指向要分解的字串,之後再次呼叫要把 s 設成 ...