c string 類基本用法

2021-06-29 04:11:23 字數 2393 閱讀 1770

c++中string是標準庫中一種容器,相當於儲存元素型別為char的vector容器(自己理解),這個類提供了相當豐富的函式來完成對字串操作,以及與c風格字串之間轉換,下面是對string一些總結《引用》

一,c語言的字串

在c語言裡,對字串的處理一項都是一件比較痛苦的事情,因為通常在實現字串的操作的時候都會用到最不容易駕馭的型別——指標。

比如下面這個例子:

//example 1:

char str[12] = "hello";

char *p = str;

*p = 'h';  //改變第乙個字母

//example 2:

char *ptr = "hello";

*ptr = 'h';  //錯誤

第乙個字串時用陣列開闢的,它是可以改變的變數。而第二個字串則是乙個常量,也就是字面值。ptr只是指向它的指標而已,而不能改變指向的內容。

看兩者的彙編即可明了:

char p = "hello";

004114b8  mov         eax,dword ptr [string "hello" (4166fch)] 

004114bd  mov         dword ptr [ebp-10h],eax 

004114c0  mov         cx,word ptr ds:[416700h] 

004114c7  mov         word ptr [ebp-0ch],cx

char *ptr = "hello";

004114cb  mov         dword ptr [ebp-1ch],offset string "hello" (4166fch)

可見用陣列和用指標是完全不相同的。

要想通過指標來改變常量是錯誤,正確的寫法應該是用const指標。

const char *ptr = "hello";

二,初識string類

正是因為c風格字串(以空字元結尾的字元陣列)太過複雜難於掌握,不適合大程式的開發,所以c++標準庫定義了一種string類,定義在標頭檔案。注意和都是錯誤的,這兩個標頭檔案主要定義c風格字串操作的一些方法,譬如strlen(), strcpy()等。第乙個是c的頭檔案格式,而第二個是c++風格的標頭檔案,但是和是一樣的,它的目的是為了和c相容。

看下面例子:

//example 3:

string str("world");   //可以用c風格字串初始化

string words = "hello";

string greet = words;

string  join = greet + words;  //可以像基本型別一樣操作

但是如果試圖把string型別的物件直接賦給c風格的字串的話,編譯器會報錯的。

string var = "olympic";

char *ptr = var;  //error!

但是實際應用中這個問題也難以避免,很多時候我們還是需要將string型別的轉化為char*來實現自定義的操作,c++標準庫也為了和之前用c寫的程式相容,於是可以用string的c_str()函式。

string var = "olympic";

char *ptr = var.c_str(); //還不能被編譯

但是c_str()為了防止意外地修改string物件,返回的是const指標,所以上面這段**是不能被編譯的。正確的應該是用const指標。

string var = "olympic";

const char *p = var.c_str(); //correct!

這個c_str()方法在c++io流操作上也被廣泛應用。

在開啟檔案時,如果要指定檔名,可以用c風格的字串。如果用到string型別的字串作為檔名時,就必須呼叫c_str()方法將其轉換為乙個c風格字串。

//example 4:

string   filename;  //定義檔名稱

cin >> filename;

ifstream.open(filename.c_str());  //要使用c風格字串

#include 

<

string

>

//使用 string 類時須包含這個檔案

#include 

<

iostream

>

using

namespace

std;

intmain()

1 #include 

2 #include 3

4int

main()

5

1

abcdefghij

2567

3 cdefghij

C string類的基本用法(一)

在c 中,字串是乙個字元陣列。最簡單的字元陣列陣列可這樣定義 char staticarray 20 宣告乙個固定長度的靜態字元陣列這樣的乙個靜態陣列,它的長度是固定的。而在很多實際問題中,我們定義的字元陣列長度事先是不能確定的,因此我們希望能宣告乙個動態字元陣列,按照程式需要動態調整陣列長度。而s...

C string類常見用法(一)

這是第一部分。和其他部落格一樣,我還是採用 方式描述,引入,具體細節請查詢文件或根據 推測,編譯執行。賦值 資料處理 迭代,遍歷 一些常用輔助性函式 include include using namespace std int main string str str str.push back i...

C String類的一些用法

string類的大部分函式 begin 得到指向字串開頭的iterator end 得到指向字串結尾的iterator rbegin 得到指向反向字串開頭的iterator rend 得到指向反向字串結尾的iterator size 得到字串的大小 length 和size函式功能相同 max si...