關於string類的建構函式及部分方法

gaopengtttt發表於2016-07-27
1、建構函式
string(const char* s); 將string物件初始化為s字串
string(size_type n,char c); 建立一個包含N個元素的string物件,其中每個元素都為c
string(const string & str);將一個string物件初始化為string物件str(複製構造)
string()建立一個預設的string物件,長度為0(預設構造)
string(const char *s ,size_type n)將string物件初始化為S指向的前n個字元
template<class Iter>  string(Iter begin,Iter end) 將string物件初始化為區間 begin end內的字元,其中begin和end類似指標,用於指定位置,包含begin不包含end
string(const string &str,string size_type pos=0,size_type n=npos)將一個string物件初始化為物件sr中從位置pos開始到結尾的字元 npos為最大位置,或從位置位置開始的n個字元

#include<iostream>
using namespace std;
int main(void)
{
        char tests[]="teststr";
        string a("test1");
        string b(10,'a');
        string c(a);
        string d;
        string e("test5",4);
        string f(tests+0,tests+5);
        string g(a,1,3);
        cout<<a<<endl<<b<<endl<<c<<endl<<d<<endl<<e<<endl<<f<<endl<<g<<endl;
}


2、讀取getline string的getline是獨立的函式(友元?)
 24     string name1;
 25     string name2;
 26     getline(cin,name1,':');                                                                                                                                        
 27     getline(cin,name2);
 28     cout<<name1<<endl<<name2<<endl;


其特點
1、到達檔案尾,eofbit設定,fail()和eof()設定為ture;
2、遇到分界符(預設為\n),在輸入流中刪除分解字元,不儲存它
3、讀取字元數達到最大值(string::npos和克分配記憶體位元組數中較小的一個),在這種情況下
    將設定輸入流的failbit,這說明fail()返回為ture;
string類過載了>>,當遇到空白字元就停止如空格、換行、製表符。


3、比較
  string類過載了 < == != > 等比較運算子,可以實現
  C字串和string之間的比較,當然也可以string和sring進行比較
  如:
  int main(void)
{
        string a("abc");
        string b("abc");
        char c[20]="abm";
        char d[20]="abc";


        if(a == b)
        {
                cout<<"a b Y"<<endl;
        }
        if(a != c)
        {
                cout<< "a c N"<<endl;
        }
        if(b == d)
        {
                cout<<"b d Y"<<endl;
        }
}


4、find方法
string::npos 是字串可以儲存的最大字元,通常是無符號的int或者無符號的long的最大值
--size_type find(const string& str,size_type pos=0)const
從字串的pos位置開始,查詢子字串str。如果找到,則返回字串首次出現時其首字元的索引,否則返回string::npos
--size_type find(const char* s,size_type pos = 0) const
從字串的pos位置開始,查詢子字串s,如果找到,則返回該字串首次出現時其首字元的索引,否則返回string::npos
--size_type find(const char* s,size_type pos=0,size_type n)
從字串的pos位置開始,查詢s的前N個字元組成的子字串,如果找到,則返回該子字串首次出現是其字元的索引,否則返回sting::npos
--size_type find(char ch,size_type pos=0) const
從字串的pos位置開始,查詢字元ch,如果找到則返回該字元首次出現的位置,否則返回string::npos


如:
string b = "test";
int n = b.find('s',1);
cout<<n<<endl;


5、capacity(),size(),reserve(n)
capacity() 檢視string的記憶體容量位元組
size()     檢視string實際資料大小位元組
reserve(n) 將string的記憶體容量更改為指定的n位元組


如:
        string b = "test";
        string c;
        string d = "ttttttttttttttttttttttttttt";
        cout<<b.capacity()<<endl; //輸出4
        cout<<b.size()<<endl;     //輸出4
        cout<<c.capacity()<<endl; //輸出0
        cout<<c.size()<<endl;     //輸出0
        cout<<d.capacity()<<endl; //輸出27
        cout<<d.size()<<endl;     //輸出27
        c.reserve(50);            //設定string c記憶體為50位元組
        cout<<c.capacity()<<endl; //輸出50
        cout<<c.size()<<endl;   //輸出0


6、c_str()
c_str() 返回一個c const char*型別指標,這一點非常有用

  #include<iostream>
  using namespace std;
  
  int main(void)
  {
      string c ="test";
      const char* b;
      b = c.c_str();
      cout<<b<<endl;
  }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2122602/,如需轉載,請註明出處,否則將追究法律責任。

相關文章