1. 程式人生 > >C++STL之string類的使用

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';
列印:string

4.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 中的字元全改成a
string 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