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...