C++STL之string類的使用
使用 string 類的標頭檔案:#include<string>,不是#include<string.h>,後面有.h的是C語言的庫。
string 也是 STL標準庫中的一個容器。
1.string的構造:
string str;
string str = “hello world”;
都是正確的寫法。
2.string特性返回和修改:
如有:
string str;
1.int size()const :返回當前字串的大小
int size = str.size();
2.int length()const :返回當前字串的長度
int len = str.length();
3.bool empty()const :判斷字串是否為空
if(str.empty())
4.void resize(size_t n,char c);或void resize(size_t n):重置字串大小
前者可以重置字串大小,且多出來的用字串char c來補充。
#include <iostream> #include <string> int main () { std::string str ("I like to code in C"); std::cout << str << '\n'; unsigned sz = str.size(); str.resize (sz+2,'+'); std::cout << str << '\n'; str.resize (14); std::cout << str << '\n'; return 0; }
輸出:
I like to code in C
I like to code in C++
I like to code
3.string字串字元操作:
1.char &at(size_t n):返回字串string str 的n位置的字元。(0<=n < str.length())
string str="hello";
cout<<str.at(1)<<endl;//列印:e
2.char & operator[ ](int n)const:返回字串string str 的n位置的字元,但與 at()相比,at會提供越界檢查,越界時會丟擲錯誤。而這種方法則不會。
string str=“hello”;
cout<<str[1]<<endl;//列印e
3. int copy(char* s,size_t len,size_t pos = 0)const;
string 字串從pos位置(預設值為0)起始,複製 len 個字元到,char型陣列中,注意一定是char 陣列,不是string,因為函式第一個引數已經規定。
返回實際成功複製的字元個數。
char s[20];
std::string str ("Test string...");
std::size_t length = str.copy(s,6,5);
s[length]='\0';
std::cout << s << '\n';
列印:string4.string的輸入輸出:
string 類過載了operator>>用於標準輸入,同樣過載了operator<<用於標準輸出。所以有:
cin>>str;//從鍵盤輸入
cout<<str;//輸出螢幕
5.string類迭代器的使用
迭代器跟指標用法十分相似。
string str="hello";
string::iterator iter; //定義一個string容器的迭代器iter
iter = str.begin(); //迭代器指向string字串str的第一個元素,即‘h’
iter = str.end(); //迭代器指向str最後一個元素的後一個位置。當iter=str.end()表示訪問str完成
也可以通過迭代器對string中的元素(即string字串中的字元)進行操作,如把字串 str 中的字元全改成astring str="hello";
string::iterator iter = str.begin();
for(iter;iter!=str.end();iter++)
{
*iter = 'a';
}
*iter 表示取 iter 迭代器指向的元素。5.string類的連線
1.string &operator+=(const string &s) //把字串s連線在字串的末尾
string a="hello";
string b=" world";
a+=b;
cout<<a<<endl; //print:hello world
2.string str.append(const char *s) //把char *c字串連線在 string 字串後
string str="hi,";
char s[]="hello";
str.append(s); //str=“hi,hello”
3.string str.append(const char*s,int n) //從char *c字串中提取前n個字元,連線在string 字串後
string str="hi,";
char s[]="hello";
str.append(s,2); //str=“hi,he”
6.string類的刪除操作:erase
1.刪除一段區間---迭代器標識:
string str="abcdefg";
string::iterator iter1,iter2; //定義兩個迭代器
iter1 = find(str.begin(),str.end(),'d'); //返回str中d位置
iter2 = str.erase(str.begin(),iter1); //刪除從str第一個元素到‘d’位置前的字元
cout<<str<<endl; //列印結果:defg
2.刪除一段區間---位置標識:
string str="abcdefg";
str.erase(0,5); //從位置0開始刪除,刪除5個字元
cout<<str<<endl; //列印結果:fg
3.刪除想刪除的字元:
string str="abcdabcdabcdabcd";
string::iterator iter;
for(iter=str.begin();iter!=str.end();iter++)
{
if(*iter =='a')
{
str.erase(iter);
}
}
cout<<str<<endl;//列印結果:bcdbcdbcdbcd
7.string類的替換
string &replace(int pos, int n , const string& str);// 從string型字串str 的 pos位置起,刪除 n 個字元,再在pos位置插入string型字串 str;
string &replace(int pos, int n ,const char * s);// 從string型字串str 的 pos位置起,刪除 n 個字元,再在pos位置插入字元型字串 s;
string str1="hello,jack!";
string str2="andy";
str1.replace(6,4,str2);
cout<<str1<<endl; //列印:hello,andy!
string &replace(int pos1,int n1,const &string s,int pos2,int n2);//從string字串的pos1位置開始,刪除n1個字元,再插入從string字串s的pos2位置起,n2個長度的子字串
string str1="hello,jack!";
string str2="hello,andy!";
string str3;
str3=str1.replace(6,4,str2,6,4);//把str1的jack先刪除,再插入str2的andy
cout<<str3<<endl; //列印:hello,andy!
8.string類的插入
string &insert(int p0, const char *s);
string &insert(int p0, const char *s, int n);
string &insert(int p0,const string &s);
string &insert(int p0,const string &s, int pos, int n);
//前4個函式在p0位置插入字串s中pos開始的前n個字元
string str1="china,guangzhou";
string str2="guangdong,";
string str3;
str3 = str1.insert(6,str2);
cout<<str3<<endl;
string &insert(int p0, int n, char c);//此函式在p0處插入n個字元c
iterator insert(iterator it, char c);//在it處插入字元c,返回插入後迭代器的位置
string str1="china,guangzhou";
string::iterator iter;
string str2 = ",guangdong";
iter = find(str1.begin(),str1.end(),',');
iter=str1.insert(iter,'A');
cout<<str1<<endl; //列印:chinaA,guangzhou
cout<<*iter<<endl; //列印:A