1. 程式人生 > >二、String基本字元系列向量容器

二、String基本字元系列向量容器

簡介在C語言中只提供了一個char型別來處理字元,而對於字串只能通過字串陣列處理,有些不太方便。C++STL提供了string基本字元系列容器來處理字串,可以把string理解為字串類,它提供有刪除、新增、替換、查詢、比較等方法。

一. String向量容器的用法

  1. 使用string容器,需要標頭檔案#include<string> ”
  2. 建立string物件  string s;
  3. 給string物件複製(兩種方法)
    • string s; s=”hello”;//直接給字串賦值
    • string s;                 /*

                  char a[100];             .

                  scanf(“%s”,&ss);    .

                  s=ss;                       */

把字元指標賦給一個字串物件(比較常用)

二. String常用函式方法總結:

getline(cin,s); // 輸入一行字串

getline(cin,s,c); // 輸入到字元c為止的字串

a+b; // 將字串b連線到字串a之後

s.begin(); // 返回字串s的起始地址

s.end(); // 返回字串s的結束地址

s.size(); // 返回字串s的長度

s.length(); // 返回字串s的長度

s.empty(); // 字串a為空返回true;否則返回false

s.compare(b); // 比較字串s,b;s大,返回1;b大,返回-1;相等,返回0

reverse(s.begin(),s.end()); // 將字串s從首到尾反向排列

printf(s.c_str()); // 用c_str()方法將字串s用printf輸出

s.erase(p); // 清除地址p的一個字元

s.erase(p,n); // 清除從地址p開始的n個字元

s.erase(p,q); // 清除從地址p開始到地址q結束的字元

s.insert(n,a); // 在字串s第n個位置插入字串a

s.insert(n,a,m); // 在字串s第n個位置插入字串a的前m個字元

s.insert(n,m,c); // 在字串s第n個位置插入m個字元c

s.replace(m,n,a); // 將字串s第m個位置開始往後的n個字元替換為字串a

s.replace(m,n,s,x,y); // 替換為字串s中第x個位置開始往後的y個字元

s.replace(m,n,s,n); // 替換為字串s的前n個字元

s.replace(m,n,x,c); // 替換為x個字元c

s.find(c); // 返回a中第一次出現字元c的位置

s.rfind(c); // 返回a中最後一次出現字元c的位置

stoi(s); // 字串s轉換為int型別

stol(s); // 字串s轉換為long int型別

stoul(s); // 字串s轉換為unsigned long int型別

stoll(s); // 字串s轉換為long long int型別

stoul(s); // 字串s轉換為unsigned long long int型別

stof(s); // 字串s轉換為float型別

stod(s); // 字串s轉換為double型別

stold(s); // 字串s轉換為long double型別

 

1.在string物件尾部新增字元

       

在string物件的尾部新增一個字元(char),可用“+”。

#include<string>

#include<iostream>

using namespace std;

int main()

{

  string s;

  s=s+'a';

  s=s+'b';

  s=s+'c';

  s=s+'1';

  cout<<s<<endl;

  return 0;

}

結果如下:

2.在string物件尾部追加字串

 

     有兩種方式:1,直接用“+”;2,用append()方法。:用append()比直接加更高效,運算更快。因為每次使用“+”,都是重新建立了一個string物件,而append(),是直接在原有的物件上進行操作。

#include<string>

#include<iostream>

using namespace std;

int main()

{

  string s,n,m,p;

 

  s="abc";

  s=s+"123";

 

  n.append("xyz");

  n.append("789");

 

  m.append(n+"456");

 

  p.append(s+n);

 

  cout<<s<<endl;

  cout<<n<<endl;

  cout<<m<<endl;

  cout<<p<<endl;

  return 0;

}

結果如下:

3.插入字元與刪除string中的元素

 

使用insert()把字元插入到迭代器位置之前。

使用erase()刪除迭代器所指的元素或一個區間中的所有元素。

清空一個字串,可以直接給它賦空字串。

#include<string>

#include<iostream>

using namespace std;

int main()

{

  string s,n,m,p;

 

  s="123456";

 

  cout<<s[0]<<endl;//輸出string中的首元素

  cout<<s[0]-'1'<<endl;//兩個相同的字元相減值為0

 

  string::iterator it;//定義迭代器變數it

 

  it=s.begin();      //迭代器位置為字串首

 

  s.insert(it+1,'a');//將字串'a'插入到第一個字元前(注:字元位置從0開始計數)

  cout<<s<<endl;

 

  s.erase(it+4);//刪除第四個元素,即下標為4的元素。(注:下標從0開始,下同)

  cout<<s<<endl;

 

  s.erase(it,it+4);//刪除0~4區間裡的元素,即1,a,2,3

  cout<<s<<endl;

 

  s="";//清空字串

  cout<<s.length()<<endl;//輸出字串的長度

 

  return 0;

}

結果如下:

4.替換與搜尋string物件的元素或字串

 

使用replace()可以替換string物件中的字元。

使用find()可以查詢字串中的第一個字元元素(用單引號界定)或者子串(用雙引號界定)。

empty()可以判斷字串是否為空,如果為空,則返回邏輯真,即1;否則,返回邏輯假,即0。

#include<string>

#include<iostream>

using namespace std;

int main()

{

  string s,n;

  s="123456";

 

  s.replace(3,2,"aaa");//從第3個開始,連續2個字元替換為“aaa”

  cout<<s<<endl;

 

  n="app cpp all";

 

  cout<<n.find('a')<<endl;//查詢第一個字元‘a’;返回下標值

  cout<<n.find("a")<<endl;//查詢第一個子串“a”;返回下標值

  cout<<n.find("app")<<endl;//查詢第一個子串“app”;返回下標值

  cout<<n.find("cpp")<<endl;//查詢第一個子串“cpp”;返回下標值

  cout<<n.find("ddd")<<endl;//找不到子串“ddd”;返回4294967295

  cout<<"判斷字串是否為空:"<<s.empty()<<endl;//判斷字串是否為空,不為空返回0

  s="";//清空字串

  cout<<endl;

  cout<<"清空字串後:"<<s.empty()<<endl;//為空返回1

 

  return 0;

}

結果如下:

5.reverse反向排序

 

用reverse可以將string容器迭代器所指向的一段區間中元素(字元)反向排序。

使用reserve()需要宣告標頭檔案“#include<algorithm>”。

#include<string>

#include<iostream>

#include<algorithm>//reverse需要此標頭檔案宣告

using namespace std;

int main()

{

  string s;

  s="123456789";

 

  reverse(s.begin(),s.end ());//123456789反向排序

  cout<<s<<endl;

 

  reverse(s.begin(),s.begin()+4);//987654321中的9876區間反向排序

  cout<<s<<endl;

  return 0;

}

   結果如下:

6.compare()比較

    使用compare()與其他字串比較大小,如果它比對方大,則返回1;如果它比對方小,則返回-1;如果相同,則返回0;(:按照ASCLL碼錶的順序對字串從前到後依次比較,字元順序大的那個字串較大)

#include<string>

#include<iostream>

using namespace std;

int main()

{

        string s;

        s="abcd";

        cout<<s.compare("abc")<<endl;//s"abc"字串大,返回1

        cout<<s.compare("abcd")<<endl;//s"abcd"字串相等,返回0

        cout<<s.compare("abce")<<endl;//s"abce"字串小,返回-1

        cout<<s.compare("z")<<endl;//s"z"字串小,返回-1

        return 0;

}

結果如下:

7.String物件與字元陣列相互操作

#include<string>

#include<iostream>

using namespace std;

int main()

{

        string s;

        char a[100];

        printf("輸入一個字串: ");

        scanf("%s",&a);

        s=a;//將字元陣列賦值給字串

        printf(s.c_str());//printf輸出字串,需要用“c_str()”

        cout<<endl;

        printf("%s\n",a);//printf輸出字元陣列

    cout<<s<<endl;//cout輸出字串

        cout<<a<<endl;//cout輸出字元陣列

        return 0;

}

結果如下: