stl之string類用法詳細總結
標準c++中String類非常強大,合理使用,能極大提高程式設計效率,下面就對string類的用法進行總結。
標頭檔案
#include<string>
String類的建構函式如下:
1) string s; //生成一個空字串s
2) string s(str) //拷貝建構函式生成str的複製品
3) string s(str,index) //將字串str內“始於位置index”的部分當作字串的初值
4) string s(str,index, n) //將字串str內“始於index且長度頂多n”的部分作為字串的初值
5) string s(cstr) //將C
6) string s(chars,chars_len) //將C字串前chars_len個字元作為字串s的初值。
7) string s(n,c) //生成一個字串,包含n個c字元
8) string s(str.begin(),str.end()) //以區間begin():end() (不包含end())內的字元作為字串s的初值
#include <iostream> #include <string> using namespace std; int main () { //定義 string s0 ("abcdefghijklmn"); string s1; string s2 (s0); string s3(s0,3); string s4 (s0,3, 4); string s5 ("let us learn string"); string s6 ("let us learn string",6); string s7 (10, 'x'); string s8 (s0.begin(), s0.begin()+7); //輸出 cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3; cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6: " << s6; cout << "\ns7: " << s7 << "\ns8: " << s8 << '\n'; return 0; }
String類常用的操作函式
之後會對相關函式進行講解,如果不想將下面操作函式全部看完,大夥可以找自己感興趣的函式看。
1) =,assign() //賦以新值
2) swap() //交換兩個字串的內容
3)+=,append(),push_back() //在尾部新增字元
4) insert() //插入字元
5) erase() //刪除字元
6) clear() //刪除全部字元
7) replace() //替換字元
8) + //串聯字串
9)==,!=,<,<=,>,>=,compare() //比較字串
10)size(),length() //返回字元數量
11) max_size() //
12) empty() //判斷字串是否為空
13) capacity() //返回重新分配之前的字元容量
14) reserve() //保留一定量記憶體以容納一定數量的字元
15) [ ], at() //存取單一字元
16)>>,getline() //從stream讀取某值
17) << //將謀值寫入stream
18) copy() //將某值賦值為一個C_string
19) c_str() //將內容以C_string返回
20) data() //將內容以字元陣列形式返回
21) substr() //返回某個子字串
22)查詢函式
23)begin() end() //提供類似STL的迭代器支援
24) rbegin() rend() //逆向迭代器
25) get_allocator() //返回配置器
字串新增
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
string s1;
//尾部插入字元
s1.push_back('a');
s1.push_back('b');
s1.push_back('c');
cout << "列印s1: " << s1 << endl;
char* cArray="efgh";
string s2(cArray);
cout << "列印s2: " << s2 << endl;
//字串的"+"操作
cout << "列印s1+s2: " << s1 + s2 << endl;
//字串s1後新增字串s2
cout << "append後,列印s1: " << s1.append(s2) << endl;
//在s1的第個字元位置前插入字元'8'
s1.insert(s1.begin()+1,'8');
cout << "insert後,列印s1: " << s1 << endl;
//字串的"+="操作
s1+=s2;
cout << "s1+=s2後,列印s1: " << s1 << endl;
return 0;
}
字元的遍歷
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
char* cArray="hello, world!";
string s(cArray);
//陣列方式
for(unsigned int j=0; j< s.size(); j++)
cout << "第" << j << "個字元: " << s[j] << endl;
//迭代器方式
string::reverse_iterator ri;
cout << "反向列印字元" << endl;
for(ri=s.rbegin(); ri!=s.rend(); ri++)
cout << *ri << ' ' ;
cout << endl;
return 0;
}
字元的刪除
1)iterator erase(iterator p);//刪除字串中p所指的字元
2)iterator erase(iterator first, iterator last);//刪除字串中迭代器
區間[first,last)上所有字元
3)string& erase(size_t pos = 0, size_t len = npos);//刪除字串中從索引
位置pos開始的len個字元
4)void clear();//刪除字串中所有字元
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
string s("12345678a");
s.erase(s.begin());
cout << s << endl; //打印出:a
s.erase(s.begin()+3, s.end()-2);
cout << s << endl; //打印出:a
s.erase(0,2);
cout << s << endl; //打印出:a
s.clear();
return 0;
}
字元的替換
1)string& replace(size_t pos, size_t n, const char *s);//將當前字串
從pos索引開始的n個字元,替換成字串s
2)string& replace(size_t pos, size_t n, size_t n1, char c); //將當前字串
從pos索引開始的n個字元,替換成n1個字元c
3)string& replace(iterator i1, iterator i2, const char* s);//將當前字串
[i1,i2)區間中的字串替換為字串s
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
string s("hello,boy!");
s.replace(6,3,"gril"); //boy替換為girl
cout << s << endl; //列印hello gril!
s.replace(10,1,1,'.'); //將"hello gril!"的'!'替換為'.'
cout << s << endl; //列印hello gril.
s.replace(s.begin(),s.begin()+5, "good morning");
cout << s << endl; //列印good morning girl.
return 0;
}
字元的搜尋
相關函式較多,下面列舉幾個常用的:
1)size_t find (constchar* s, size_t pos = 0) const;
//在當前字串的pos索引位置開始,查詢子串s,返回找到的位置索引,
-1表示查詢不到子串
2)size_t find (charc, size_t pos = 0) const;
//在當前字串的pos索引位置開始,查詢字元c,返回找到的位置索引,
-1表示查詢不到字元
3)size_t rfind (constchar* s, size_t pos = npos) const;
//在當前字串的pos索引位置開始,反向查詢子串s,返回找到的位置索引,
-1表示查詢不到子串
4)size_t rfind (charc, size_t pos = npos) const;
//在當前字串的pos索引位置開始,反向查詢字元c,返回找到的位置索引,
-1表示查詢不到字元
5)size_tfind_first_of (const char* s, size_t pos = 0) const;
//在當前字串的pos索引位置開始,查詢子串s的字元,返回找到的位置索引,
-1表示查詢不到字元
6)size_tfind_first_not_of (const char* s, size_t pos = 0) const;
//在當前字串的pos索引位置開始,查詢第一個不位於子串s的字元,
返回找到的位置索引,-1表示查詢不到字元
7)size_t find_last_of(const char* s, size_t pos = npos) const;
//在當前字串的pos索引位置開始,查詢最後一個位於子串s的字元,返回找到的位置索引,-1表示查詢不到字元
8)size_tfind_last_not_of (const char* s, size_t pos = npos) const;
//在當前字串的pos索引位置開始,查詢最後一個不位於子串s的字元,返回找到的位置索引,-1表示查詢不到子串
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
//0123456789012345678901234
string s("dog bird chicken bird cat");
//字串查詢
cout << s.find("bird") << endl; //列印
cout << (int)s.find("pig") << endl; //列印-1
//字元查詢
cout << s.find('i',7) << endl; //列印
//從字串的末尾開始查詢字串
cout << s.rfind("bird") << endl; //列印
//從字串的末尾開始查詢字元
cout << s.rfind('i') << endl; //列印
//查詢第個屬於某子串的字元
cout << s.find_first_of("13r98") << endl; //找到字元r,列印
//查詢第個不屬於某字串的字元
cout << s.find_first_not_of("dog bird 2006") << endl; //找到字元c,列印
//查詢最後一個屬於某子串的字元
cout << s.find_last_of("13r98") << endl; //字元r,列印
//查詢最後一個不屬於某字串的字元
cout << s.find_last_not_of("tea") << endl; //字元c,列印
return 0;
}
字串的比較
1)int compare (conststring& str) const;//將當前字串與字串str比較,
相等返回0,大於str返回1,小於str返回-1
2)int compare (size_tpos, size_t len, const char* s) const; //將當前字串從
Pos索引位置開始的len個字元構成的字串與字串s比較,
相等返回0,大於str返回1,小於str返回-1
3)int compare (constchar* s) const; //直接將當前字串與字串s比較,
相等返回0
#include <string>
#include <iostream>
using namespace std;
int main(void)
{
string s1("abcdef");
string s2("abc");
cout << s1.compare("abcdef") << endl; //相等,列印
cout << s1.compare(s2) << endl; //s1 > s2,列印
cout << s1.compare("abyz") << endl; //s1 < "abyz",列印-1
cout << s1.compare(0,3,s2) << endl; //s1的前個字元==s2,列印
return 0;
}
文章為本人原創,轉載請註明出處:http://blog.csdn.net/lsh_2013/article/details/46728993