關於字串 string類

2021-09-29 14:17:12 字數 3790 閱讀 9270

1、 字串

字串是儲存在記憶體的連續位元組中的一系列字元。

儲存在連續位元組中的一系列字元意味著可以將字串儲存在char陣列中,其中每個字元都位於自己的陣列元素中。

什麼時候char陣列是string型別?

char dog[8]=; //not a string

char cat[8]=; //a string

只有第二個陣列是字串。

在cat陣列示例中,將陣列初始化為字串的工作看上去冗長乏味——使用了大量的單引號,且必須加上空字元。

有一種更好的初始化字串的方法——只需使用乙個引號括起來的字串即可。這種字串被稱為字串常量或者字串字面值。

char fish=」bubbles」; //結尾有空字元 並且字元陣列的長度由編譯器數

用引號括起的字串隱式地包括結尾的空字元,因此不必顯示地包括它。

注意:char boss[8]=」bozo」;

陣列boss[4]為空值字元,其是自動加入到結尾

剩餘的boss[5]~boss[7]均設定為\0

如果將boss[3]設定為空字元,這使得字串在第3個字元後即結束,雖然陣列中還有其他的字元。

1) 在確定儲存字串所需的最短陣列時,別忘了將結尾的空字元計算在內。

2) 字串常量(使用雙引號)不能與字元變數(使用單引號)互換

字元常量(如』s』)是字串編碼的簡寫表示。在ascii系統種,』s』只是83的另一種寫法。

例如:char shirt_size=』s』;

但是」s」不是字元常量,它表示的是兩個字元(字元s和\0)組成的字串。另外,」s」實際上表示的是字串所在的記憶體位址。

下面語句試圖將乙個記憶體位址賦給shirt_size,這是錯誤的!

char shirt_size=」s」; //invalid

2、 拼接字串常量

c++允許拼接字串字面值,即將兩個用引號括起來的字串合併為乙個。事實上,任何兩個由空白(空格、製表符和換行符)分隔的字串常量都將自動拼接成乙個。

cout<<」hello」 「world\n」; //helloworld

注意:拼接時不會在被連線的字串之間新增空格,第二個字串的第乙個字元緊跟第乙個字串的最後乙個字元(不考慮\0)後面。

第乙個字串中的』\0』字元將被第二個字元中的第乙個字元取代。

3、 在陣列中使用字串

其實主要還是對陣列使用字串初始化

char name[***]=」helloworld」;

對與char陣列,不是char*,

sizeof()運算子指出整個陣列的長度,

但strlen()函式返回的是儲存在陣列中的字串的長度;

4、 字串輸入(這個demo是乙個單詞乙個單詞讀取)

char name[20];

cin>>name;

char dessert[20];

cin>>dessert;

5、 每次讀取一行字串

istream中的類(如cin)提供了一些面向行的類成員函式:getline()和get();

這兩個函式都讀取一行輸入,直到到達換行符;

然而getline()將丟棄換行符,而get()將換行符保留在輸入序列中。

1) 面向行的輸入:getline()

getline()函式讀取整行,它使用回車鍵輸入的換行符來確定輸入結尾,可以使用cin.getline(),該函式有兩個引數,第乙個引數是用來儲存輸入行的陣列的名稱,第二個引數是要讀取的字元數。

例如:cin.getline(name,20); //引數是20,則函式最多讀取19個字元。

getline()成員函式在讀取指定數目的字元或遇到換行符停止讀取。

例如:char name[20];

cin.getline(name,20); //這樣在name中就可以輸入 hello world 按「enter」結束

2) 面向行的輸入:get()

get 將換行符留在輸入佇列中。

cin.get(name,20);

cin.get(dessert,20); //有問題

由於第一次呼叫後,換行符將留在輸入佇列中,因此第二次呼叫時看到的第乙個字元便是換行符,因此get()認為已到達行尾,而沒有發現任何可讀取的內容

如果不借助於幫助,get()將不能跨過該換行符。

幸運的是,get()有另一種變體,使用不帶任何引數的cin.get()呼叫可讀取下乙個字元(即使是換行符),因此可以用它來處理換行符。

cin.get(name,20);

cin.get(); //接收了換行符

cin.get(dessert,20);

或者採用拼接的方式:

cin.get(name,20).get();

cin.get(dessert,20).get();

6、 string類簡介

將字串作為一種資料型別的表示方法。

string str1;

string str2=」panthers」;

***x

cin>>str1;

cout《使用string物件的方式與使用字元陣列相同

1、 c風格字串來初始化string物件

2、 使用cin來將鍵盤輸入儲存到string物件中

3、 使用cout來顯示string物件

4、 使用陣列表示法來訪問儲存在string物件中的字元

string物件和字元陣列之間主要區別是:可以將string物件宣告為簡單變數,而不是陣列。

string str1;

string str2=」panthers」;

類設計讓程式能夠自動處理string大小。例如,str1的宣告建立乙個長度為0的string物件,但程式將輸入讀取到str1中時,將自動調整str1的長度。

cin>>str1;

7、 賦值、拼接和附加

使用string類時,某些操作比使用陣列更簡單。例如,不能將乙個陣列賦給另乙個陣列,但可以將乙個string物件賦給另乙個物件。

char charr1[20];

char charr2[20]=」jaguar」;

string str1;

string str2=」panther」;

charr1=charr2; //invalid

str1=str2;

string類可以使用運算子+將兩個string物件合併起來,還可以使用運算子+=將運算子附加到string物件的末尾。

string str3;

str3=str1+str2; //str1和str2和在一起

str1+=str2; /將str2新增到str1的末尾

8、 string類的其他操作

使用函式strcpy()將字串複製到字元陣列中,使用函式strcat()將字串附加到字元陣列末尾。

#include

#include

#include

#include

using namespace std;

int main()

/*rst:

before len1=12

before len2=11

the string pantherpaste contains 12characters

the string jaguarjuice contains 11characters

*///c++中string、char*、char的轉換

#include

using namespace std;

int main()

tmpp[i] = '\0';

getchar();

return 1;

關於字串String

通過string類的實現原始碼可以獲知,string類是final類,通過byte陣列儲存字串。檢視substring concat和replace方法,發現都不是在原字串上進行操作,而是重新生成了乙個新字串物件,也就是操作完成後,最開始的字串並沒有被改變。記住 對string物件的任何改變都不影響...

關於字串 String

本文主要記錄一些字串中的方法 contact 將兩個或多個字元的文字組合起來,返回乙個新的字串 var a hello var b world var c a.contact b hello,world indexof 返回字串中乙個子串第一處出現的索引 從左到右搜素 如果沒有匹配項,返回 1 va...

String字串類實現

1 class string 2 建構函式string string const char str else string str hell0 3 析構函式string string 4 拷貝構造string string const string other string s1 hello str...