1. 程式人生 > >stl之string類用法詳細總結

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

字串作為s的初值

6)    string s(chars,chars_len) //C字串前chars_len個字元作為字串s的初值。

7)    string s(n,c) //生成一個字串,包含nc字元

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