字符串:string及char

一、標準庫類型string

標準庫類型string表示可變長的字符序列
1、定義和初始化string類型對象

string s; // 空字符串
string s1 = "hello";
string s2(6, 'k'); //s2的內容是6個k
string s3(s1);

2、對象的直接初始化和拷貝
如果使用等號(=)初始化一個變量,實際是執行拷貝初始化,編譯器把等號右邊的值拷貝到新創建的對象中去。與之相反,如果不使用等號,則執行的是直接初始化。

3、輸入字符串

string str1,str2;
cin>>str1; //遇到空格符就停止讀入
getline(cin,str2); //一次讀取一整行,遇到換行符就停止。

4、兩個string對象相加

  • 當把string對象和字符字面值及字符串字面值混在一條語句中使用時,必須確保每個加法運算符的兩側的運算對象至少有一個是string
  • C++中的字符串字面值並不是標準庫類型string的對象
string s1 = "hello";
string s2 = s1 + "Tom";  //正確,一個string對象和一個字面值相加
string s3 = "hello" + "Tom";  //錯誤,兩個運算對象都不是string對象。
string s4 = s1 + "," + "Tom"; //正確,根據運算符優先級,相當於先s1+","結果爲一個string對象,再和字面值"Tom"相加
string s5 = "hello" + "," + s1; //錯誤,根據優先級"hello"與","兩個字面值將先進行相加。等價於("hello" + ",") + s1

5、遍歷string中的每個字符

string str("hello world");
// 若要修改str中的字符,可以使用引用類型 auto &s
for (auto s : str)
	cout << s;

二、char數組形式的字符串:字符數組

字符數組的結尾是一個空字符
1、字符數組的初始化

char s[] = "hello\0";
char *s1 = new char[60];
strcpy(s1, "world"); //將字符串"world"拷貝到字符數組s1中
cout << s1 << endl; //輸出拷貝到s1中的字符數組
cout << *s1 << " , " << s1[2] << endl; 

運行結果如下:
在這裏插入圖片描述
2、將string對象轉換成C風格的字符串
不能直接用string對象來初始化指向字符的指針

string str("hello");
char *s1=str; //錯誤,不能直接用string對象來初始化char*
// c_str()返回一個 const char* 類型的指針
const char *s2=str.c_str();//正確,將string對象轉換成C中字符串的樣式

c_str()函數返回一個指向C字符串的常量指針(const char*), 內容與string字符串相同
C++中 c_str( )主要用法就是這是爲了與c語言兼容,在c語言中沒有string類型,故必須通過string類對象的成員函數c_str()把string 對象轉換成c中的字符串樣式。

c_str() 以 char* 形式傳回 string 內含字符串。

char c[20]; 
string s="1234"; // s.c_str()將string對象轉換成C形式的字符數組
strcpy(c,s.c_str()); 

這樣纔不會出錯,c_str()返回的是一個臨時指針,不能對其進行操作。

但是在任何出現string類型對象的字符串的地方,都可以用以空字符結束的字符數組來代替。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章