寫在前面: 我是「虐貓人薛定諤i」,一個不滿足於現狀,有夢想,有追求的00後
本博客主要記錄和分享自己畢生所學的知識,歡迎關注,第一時間獲取更新。
不忘初心,方得始終。自己的夢想,終有一天會實現!
❤❤❤❤❤❤❤❤❤❤
目錄
概述
標準庫類型string表示可變長的字符序列,使用string類型必須首先包含string頭文件。作爲標準庫的一部分,string定義在命名空間std中。
#include <string>
using std::string;
定義和初始化string對象
string str1 = "zhangsan" // 拷貝初始化
string str2("zhangsan") // 直接初始化
string str3(3, 'a') // 直接初始化,str3的內容是 aaa
string對象上的操作
讀寫string對象
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cin >> s; // 輸入
cout << s << endl; // 輸出
return 0;
}
注意: string對象會自動忽略開頭的空白(即空格符、換行符、製表符等)並從第一個真正的字符開始讀起,直到遇到下一個空白爲止。
使用getline讀取一行
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
getline(cin, s); // 讀取一行
cout << s << endl;
return 0;
}
getline 函數的參數是一個輸入流和一個string對象,函數從給定的輸入流中讀入內容,直到遇到換行符爲止(注意換行符也被讀進來了),然後把所讀取的內容存入那個string對象中去(注意不存換行符)。
getline 只要一遇到換行符就結束讀取操作並返回結果,因此,如果輸入真的一開始就是換行符,那麼所得的結果就是個空string
string的empty和size操作
empty函數:判斷string對象是否爲空
size函數:返回string對象的長度(即string對象中的字符的個數)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
getline(cin, s);
cout << s.empty() << endl; // 判斷s是否爲空
cout << s.size() << endl; // 返回s的長度
cout << s << endl;
return 0;
}
注意: 由於size函數返回的是一個無符號整型數,因此切記,如果在表達式中混用了帶符號數和無符號數將可能產生意想不到的結果。
比較string對象
注意: 這些比較運算符會逐個比較string對象中的字符,並且對大小寫敏感。
兩個string對象相加
兩個string對象相加得到一個新的string對象,其內容是把左側的運算對象與右側的運算對象串接而成。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "Hello ";
string s2 = "World";
string s3 = s1 + s2;
s1 += s2;
cout << s3 << endl;
cout << s1 << endl;
return 0;
}
字面值和string對象相加
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1 = "Hello";
string s2 = "World";
string s3 = s1 + ' ' + s2 + '!';
cout << s3 << endl;
return 0;
}
注意: 當把string對象和字符的字面值以及字符串字面值混在一條語句中使用時,必須確保每個加法運算符(+)的兩側的運算對象至少有一個是string。
處理string對象中的字符
使用基於範圍的for循環語句
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str("My name is zhangsan!!!");
for (auto c : str)
{
cout << c << endl;
}
return 0;
}
使用範圍 for 語句改變字符串中的字符
如果要改變string對象中的字符值,必須把循環變量定義成引用類型。
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string str("My name is zhangsan!!!");
for (auto &c : str)
{
c = toupper(c);
cout << c << endl;
}
return 0;
}
下標運算符
[] :接收一個參數,該參數表示要訪問的字符的位置,返回值是該位置上的字符引用。
string 對象的下標從0計起,該下標大於等於0而小於s.size()
構造string的其他方法
這些構造函數接受一個string或者一個const char *參數,還接受(可選的)指定拷貝多少個字符的參數。當我們傳遞給它們一個string時,還可以給定一個下標來指出從哪裏開始拷貝。
substr 操作
substr 操作返回一個string,它是原始string的一部分或全部的拷貝。我們可以傳遞給substr一個可選的開始位置和計數值。
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string str("hello world");
string s1 = str.substr(0, 5);
cout << s1 << endl;
string s2 = str.substr(6);
cout << s2 << endl;
string s3 = str.substr(6, 11);
cout << s3 << endl;
return 0;
}
改變string的其他方法
string 類型支持順序容器的賦值運算符以及assign、insert和erase操作
s.insert(s.size(), 5, '!') // 在s的末尾插入5個感嘆號
s.erase(s.size() - 5, 5) // 從s的刪除最後5個字符
append和replace函數
append函數: 在string末尾進行插入操作
replace函數: 調用erase和insert的一種簡寫形式
string 搜索操作
string類提供了6個不同的搜索函數,每個函數有四個重載版本。
注意: 搜索(以及其他string操作)是大小寫敏感的。當在string中查找子字符串時,要注意大小寫。
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string str("hello world");
int index = str.find("world");
cout << index << endl;
return 0;
}
compare函數
除了關係運算符外,標準庫string類型還提供了一組compare函數。
根據s是等於、大於還是小於參數指定的字符串,s.compare返回0、正數或負數。
數值轉換
字符串中常常包含表示數值的字符。
注意: string參數中第一個非空白符必須是符合(+或-)或數字。它可以以0x或0X開頭來表示十六進制數。對那些將字符串表示形式轉換爲對應的雙精度浮點值。