C STL string 用法詳解

2021-08-28 16:58:13 字數 4727 閱讀 8224

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

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

string類是乙個模板類,位於名字空間std中,通常為方便使用還需要增加:

using namespace std;
宣告乙個字串變數很簡單:

string str;
測試**:

#include #include using namespace std;

int main ( )

{ string str; //定義了乙個空字串str

str = "hello world"; // 給str賦值為"hello world"

char cstr = "abcde"; //定義了乙個c字串

string s1(str); //呼叫複製建構函式生成s1,s1為str的複製品

cout《程式執行結果為:

hello world

world

worabcde

abcaaaaa

hello

你可以用 ==、>、=、<=、和!=比較字串,可以用+或者+=操作符連線兩個字串,並且可以用獲取特定的字元。

#include #include using namespace std;

int main()

{ string str;

cout << "please input your name:"<> str;

if( str == "li" ) // 字串相等比較

cout << "you are li!"=、<=類似

cout << "your name should be ahead of li"《程式執行結果為:

please input your name:

zhang↙

you are not wang!

zhang, welcome!

zhang, welcome!

上例中,「 cout<< str[i]; 」可換為: cout<< str.at(i); 

三、string特性描述

可用下列函式來獲得string的一些特性:

int capacity()const; //返回當前容量(即string中不必增加記憶體即可存放的元素個數)

int max_size()const;    //返回string物件中可存放的最大字串的長度
int size()const;        //返回當前字串的大小
int length()const;       //返回當前字串的長度
bool empty()const;        //當前字串是否為空
void resize(int len,char c);  //把字串當前大小置為len,多去少補,多出的字元c填充不足的部分
測試**:

#include #include using namespace std;

int main()

{ string str;

if (str.empty())

cout<

str is null.

str is abcdefg

str's size is 7

str's capacity is 15

str's max size is 4294967294

str's length is 7

str is abcdefgccc

str is abcde

由於查詢是使用最為頻繁的功能之一,string提供了非常豐富的查詢函式:(注:string::npos)

size_type find( const basic_string &str, size_type index ); //返回str在字串中第一次出現的位置(從index開始查詢),如果沒找到則返回string::npos

size_type find( const char *str, size_type index );  // 同上
size_type find( const char *str, size_type index, size_type length );  //返回str在字串中第一次出現的位置(從index開始查詢,長度為length),如果沒找到就返回string::npos
size_type find( char ch, size_type index );  // 返回字元ch在字串中第一次出現的位置(從index開始查詢),如果沒找到就返回string::npos
注意:查詢字串a是否包含子串b,不是用 stra.find(strb) > 0 而是 stra.find(strb) != string:npos 這是為什麼呢?(初學者比較容易犯的乙個錯誤)本部分參考自web100與luhao1993

先看下面的**

int idx = str.find("abc");

if (idx == string::npos);

上述**中,idx的型別被定義為int,這是錯誤的,即使定義為 unsigned int 也是錯的,它必須定義為 string::size_type。npos 是這樣定義的: static const size_type npos = -1; 因為 string::size_type (由字串配置器 allocator 定義) 描述的是 size,故需為無符號整數型別。因為預設配置器以型別 size_t 作為 size_type,於是 -1 被轉換為無符號整數型別,npos 也就成了該型別的最大無符號值。不過實際數值還是取決於型別 size_type 的實際定義。不幸的是這些最大值都不相同。事實上,(unsigned long)-1 和 (unsigned short)-1 不同(前提是兩者型別大小不同)。因此,比較式 idx == string::npos 中,如果 idx 的值為-1,由於 idx 和字串string::npos 型別不同,比較結果可能得到 false。因此要想判斷 find()等查詢函式的結果是否為npos,最好的辦法是直接比較。

測試**:

執行結果:

#include#includeusing namespace std;

int main(){

int loc;

string s="study hard and make progress everyday! every day!!";

loc=s.rfind("make",10);

cout<

五、其他常用函式

string &insert(int p,const string &s); //在p位置插入字串s

string &replace(int p, int n,const char *s); //刪除從p開始的n個字元,然後在p處插入串s
string &erase(int p, int n);  //刪除p開始的n個字元,返回修改後的字串
string substr(int pos = 0,int n = npos) const;  //返回pos開始的n個字元組成的字串
void swap(string &s2);    //交換當前字串與s2的值
void push_back(char c)   //當前字串尾部加乙個字元c
const char *data()const;   //返回乙個非null終止的c字元陣列,data():與c_str()類似,用於string轉const char*其中它返回的陣列是不以空字元終止,
const char *c_str()const;  //返回乙個以null終止的c字串,即c_str()函式返回乙個指向正規c字串的指標, 內容與本string串相同,用於string轉const char*
測試**:

#include #include using namespace std;

int main()

{ string str1 = "abc123defg";

string str2 = "swap!";

cout《程式執行結果為:

abc123defg

abcdefg

123abcdefg

123abcdefg123

123abcdefg123a

helloabcdefg123a

abcdefg

swap!

swap!

C STL string常用用法詳解

為了方便對字串進行操作,對字串常用的需求功能進行了封裝。要是有string,需加標頭檔案 include string str 1 通過下標訪問 2 通過迭代器訪問 需要注意定義 string iterator it include include using namespace std int m...

C STL string 簡單使用

define crt secure no warnings includeusing namespace std include include string 建構函式 string 建立乙個空的字串 例如 string str string const string str 使用乙個string物...

C STL string 使用筆記

拼接 直接用 1 str str1 str2 2 str str1 abc 3 str abc 4 str abc abc 前三種都合法,第四種不合法,即等號右邊最多只能出現乙個 abc 比較 直接符號比較,字典序 反向 reverse str.begin str.end 返回長度 str.size...