c 筆記本之「字串」處理

2021-06-28 18:43:30 字數 1911 閱讀 2755

部落格:

c++處理字串的方式有兩種:

來自c語言,即c風格字串。

基於string類庫。

本篇部落格主要歸納c風格字串的常規用法,關於string類庫的一些內容將在後續部落格中進行總結。

儲存在連續位元組中的一系列字元意味著可以將字串儲存在char陣列中。c-風格字串具有一種特殊的性質:以空字元結尾,空字元被寫為\0,其ascii碼為0,用來標記字串的結尾。

例如下面兩個宣告:

char str1 = ;  //不是字串

char str2 = ; //是字串

上面兩個陣列都是char陣列,但是只有第二個陣列是字串。空字元對c-風格字串而言至關重要。在c++中有很多處理字串的函式,其中包括大家最熟悉的cin等函式,它們都逐個地處理字串中的字元,直至達到空字元為止。

上述將陣列初始化為字串的工作需要使用大量的單引號,且必須加上空字元,這顯得十分費力。因此,我們常使用乙個用引號括起來的字串即可,如:

char animal[10] = "tiger";
用引號括起的字串隱式地包括結尾的空字元。將字串讀入到char陣列中時,將自動加上結尾的空字元,當然,這裡我們應確保陣列足夠大,能夠儲存字串中的所有字元,也包括空字元。

note:

1)字串常量(使用雙引號)不能與字元常量(使用單引號)互換,因為字串常量還隱含了乙個字元』\0』。

2)strlen(animal)的值為5。(不是6,因為strlen只計算可見的字元)

首先定義乙個陣列:

const

int size = 20;

char name[size];

之後我們輸入字串到name:cin>>name;

比如,我們輸入的字串為:」qian xin」;

接著,我們輸出字串name的內容:cout《那麼我們如何實現講」qian xin」成功讀取至陣列name中呢?

istream中的類提供了一些面向行的類成員函式:getline()和get()。這兩個函式都可以讀取一行輸入,直至換行符。不同的是,getline()將丟棄換行符,而get()將換行符保留在輸入序列中。

getline()

getline()函式讀取整行,它使用通過回車鍵輸入的換行符來確定輸入結尾。該函式有兩個引數,第乙個引數是用來儲存輸入行的陣列的名稱,第二個引數是要讀取的字元數。如這個引數為10,則函式最多只能讀取9個字元,餘下的空間用於儲存自動在結尾處新增的空字元。 如:cin.getline(name,10);

get()

該函式有幾種變體,其中一種與getline()相似,他們接受的引數相同,並且都讀取到行尾。但get並不再讀取並丟棄換行符,而是將其留在輸入佇列中。假設我們連續兩次呼叫get():

cin.get(animal,20);

cin.get(fruit,20); //此處有問題

第一次呼叫後,換行符留在了輸入佇列中,因此第二次呼叫時看到的第乙個字元便是換行符,get()認為已到達行尾,因此,fruit無法成功讀取內容。

cin.get(animal,20);

cin.get();

cin.get(fruit,20);

除了連續向兩個陣列輸入字串可能會出現這類錯誤時,混合輸入數字和字串也會導致問題,看如下**:

int main (int argc, char

const *argv)

此時發現name輸出為空;問題在於,當cin讀取年齡時,將回車鍵生成的換行符留在了輸入佇列中,後面的getline看到換行符後,將認為是乙個空行,並將乙個空字串賦給name陣列。這裡我們依然可以使用不帶有引數的get先讀取並丟棄換行符。

C 學習筆記 字串處理

2.3 常用字串函式 2.4 原始字串字面量 c 提供了兩種型別的字串表示形式 c風格字串 c 引入的string類型別 字串實際上是使用null字元 0 終止的一維字元陣列。由於在陣列的末尾儲存了空字元,因此字元陣列的大小比 hello 的字元數多乙個。但是在定義字元陣列時,不需要把null字元放...

字串處理 筆記

字串處理 筆記 region 輸出字串 返回於編輯的字串並進行html解碼 要輸出的字串 public static string outstring string instr 返回用於顯示的字串並刪除超過限定字數的字元 要輸出的文字 要輸出的字數 public static string outs...

字串處理筆記

類似於strlen,strcmp,strpcy就不寫了。以下都是在vc6.0下編譯,可能在vs上編譯錯誤。功能 c 乙個字串連線在另乙個字串後面。strchr 函式 功能 c 從某乙個字串開始輸出字串。include includevoid main else return 0 strrev函式 功...