c++STL系列之String
開頭總結:
C++中STL的概念總結:
1、容器
2、迭代器
STL中所有的不同庫都是容器的概念體現,基本操作都是基于迭代器的操作。
一、string
string 其實相當于一個保存字符的序列容器,因此除了有字符串的一些常用操作以外,還有包含了所有的序列容器的操作。字符串的常用操作包括:增加、刪除、修改、查找比較、鏈接、輸入、輸出等。下圖是字符串在內存中的存儲方式,所以對于string類型,依舊可以使用下標來操作。

二、string常用方法
//頭文件 #include<string> //聲明 string str = “abc”; //str的長度,結果為:3 str.length(); str.size(); //得到str的頭字符,輸出為:a str.front(); //得到str的尾字符,輸出為:c str.back(); //得到str的第i位置的字符 str.at(i); str[i];//兩種方法都可以,第一種方法在字符不存在時不會報錯
三、高階用法
字符串的拼接:
string str = "abc";
//str添加,該方法只能添加一個字符
str.push_back('d');//str = "abcd"
//str拼接也可以使用 + 操作符
string str1 = "ef";
str += str1;//str = "abcdef"
//str拼接也可以使用 append() 函數,將str1添加到str后
str.append(str1);
//append() 函數,也可以指定將str2指定部分添加到str后
string str2 = "qwertyu";
//將str2的下標1-4位置添加到str后
str.append(str2,1,4);//str = "abcdefwert",str = "abcdef"
切割字符串:
//切割字符串
string str11 = "abcdefg";
//,第一個參數為位置,第二個參數為長度,保留位置0后面的三個字符
str11 = str11.substr(0,3);
翻轉字符串:
string s1 = "abc";
//翻轉字符串
reverse(s1.begin(),s1.end());//開始位置,結束位置
字符串的替換:
string str2 = "qwertyu";
//將str2替換為str
str.assign(str2);//此時str的值為str2的字符串
str.assign(str2,4,2);//將str2的下標4后的2個字符替換str
字符串的插入:
//插入 str.insert(pos,value)
str.insert(1,"sss");//在str下標1的位置插入“sss"
字符串的刪除:
//erase()刪除操作
string str ("This is an example phrase.");
string::iterator it;
// 第(1)種用法
str.erase (10,8);
cout << str << endl; // "This is an phrase."
// 第(2)種用法,刪除一個字符
it=str.begin()+9;
str.erase (it);
cout << str << endl; // "This is a phrase."
// 第(3)種用法,刪除區間
str.erase (str.begin()+5, str.end()-7);
cout << str << endl; // "This phrase."
字符串的查找:string中find()返回值是字母在母串中的位置(下標記錄),如果沒有找到,那么會返回一個特別的標記npos。
//find()查找
string str = "tsssy";
int p = str.find('s',0);//第二個參數為起始查找位置,省略默認從0開始
string::size_type po = str.find("s");//p和pp都為記錄查找位置
if (p != str.npos)
{
cout<<p<<endl;//如果找到則返回索引位置,結果為:1
} else
cout<<"沒有找到"<<endl;
//子串出現在母串中的首次出現的位置
int p_first = str.find_first_of("s");
cout<<p_first<<endl;//結果為:1
//子串出現在母串中的末次出現的位置
int p_last = str.find_last_of("s");
cout<<p_last<<endl;//結果為:3
//查找子串與母串均不相同的首個位置
int p_first_no = str.find_first_not_of("tf");
cout<<p_first_no<<endl;//結果為:1
//查找子串與母串均不相同的末個位置
int p_last_no = str.find_last_not_of("ey");
cout<<p_last_no<<endl;//結果為:3
字符串的比較compare():
//比較
string a = "asdf";
string b = "qwer";
string c = "sdf";
// 1.直接比較兩個字符串,返回0則表示兩個字符串相同
int number = a.compare(b); //結果為 number=-1;
int number1 = b.compare(b); //結果為 number=0;
int number2 = a.compare("asdf"); //結果為 number=0;
// 2.一個字符串的子串與另一個字符串比較
int number3 = a.compare(1,3,c); //用a[1:3]和c相比,結果為 number=0;
//字符串b從下標為1的字符開始的三個字符與字符串d比較,顯然都是fgh,所以相等,返回0
int number4 = b.compare(1,3,c); //結果為 number=1;
int number5 = a.compare(1,3,"sdf"); //結果為 number=0;
// 3.一個字符串的子串與另一個字符串的子串比較
int number6 = a.compare(1,3,c,0,2); //結果為 number= 0;
//字符串a從下標為1的地方開始的后3個字符是sdf,字符串c從下標為0的字符開始的后三個字符是sdf,所以相等
str.c_str():
浙公網安備 33010602011771號