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

String 基本字元容器系列

  • 標頭檔案:#include<string>
  • 建立string物件
#include<string>
#include <iostream>
using namespace std;

int main(int argc,char*argv[]) {
    //建立長度為零的字串
   string s;
   cout<<s.length()<<endl;
    return 0;
}
  • 給string物件賦值
​
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[]) {
    
   string s;
   //直接給字串賦值
   s="hello world!";
   cout<<s<<endl;
   //把字元指標賦值給一個字串物件
   string string;
   char a[45];
   //scanf的輸入速度比cin快得多
   //scanf是c語言的函式,不支援string物件
   scanf("%s",&a);
   //把整個字串陣列賦值給string物件
   string=a;
   cout<<string<<endl;
    return 0;
}

​
  • 從string物件尾部新增字元
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   s=s+'a';
   s=s+'n';
   s=s+'d';
   cout<<s<<endl;
    return 0;
}
  • 從string物件尾部追加字串
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   //直接用+操作符
   s=s+"and";
   s=s+"AND";
   s=s+"123";
   cout<<s<<endl;
   
   //採用append()方法
   string ss;
   ss.append("and");
   ss.append("AND");
   ss.append("123");
   cout<<ss<<endl;
    return 0;
}
  • 給string物件插入字元
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   s="abcdefg";
   //定義迭代器
   string::iterator it;
   //迭代器位置為串首
   it=s.begin();
   //插入'x'到第二個位置
   s.insert(it+2,'x');
   cout<<s<<endl;
    return 0;
}
  • 訪問string物件元素
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   s="abcdefg";
//輸出首元素
   cout<<s[0]<<endl;
//相同相減為零
   cout<<s[0]-'a'<<endl;
    return 0;
}
  • 刪除string物件的元素
  1. 清空一個字串,直接給它賦空字串即可
  2. 使用erase()方法
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   s="abcdefgh12345";
   //定義迭代器
   string::iterator it;
   it=s.begin();
   //刪除第三個元素
   s.erase(it+3);
   cout<<s<<endl;
   //刪除區間0-4的所有元素
   s.erase(it,it+4);
   cout<<s<<endl;
   //清空字串
   s="";
   cout<<s.length()<<endl;
   return 0;
}
  • 返回string物件的長度
  1. 採用length()方法可以返回字串長度
  2. 採用empty()方法可以返回字串是否為空
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   s="abcdefgh12345";
   //輸出字串長度
   cout<<s.length()<<endl;
   //清空字串
   s="";
   //判斷是否為空
   cout<<s.empty()<<endl;
   return 0;
}
  • 替換string物件的字元
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   s="abcdefgh12345";
   //從第八個開始,連續5個字元替換為" good";
   s.replace(8,5," good");
   cout<<s<<endl;
   return 0;
}
  • 搜尋string物件的元素或子串
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   s="abcdefgh12345";
    //查詢第一個字元'c',返回下標值
   cout<<s.find('c')<<endl;
   //查詢第一個子串"c",返回下標值
   cout<<s.find("c")<<endl;
    //查詢第一個字元"123",返回下標值
   cout<<s.find("123")<<endl;
    //查詢第一個字元"132",查不到返回18446744073709551615
   cout<<s.find("132")<<endl;
    return 0;
}
  • string物件的比較
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   s="abcdefgh12345";
   //s小,返回負數
   cout<<s.compare("cdde")<<endl;
   //s大,返回正數
   cout<<s.compare("aad")<<endl;
   //一樣大,返回零
   cout<<s.compare("abcdefgh12345")<<endl;
    return 0;
}
  • 用reverse反向排序string物件
  1. reverse()方法標頭檔案:#include<algorithm>
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   s="abcdefgh12345";
   reverse(s.begin(),s.end());
   cout<<s<<endl;
   return 0;
}
  • string物件作為vector元素
#include<string>
#include<vector>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
    vector<string>v;
    v.push_back("Nike");
    v.push_back("Senma");
    v.push_back("Jaodan");
    cout<<v[0]<<endl;
    cout<<v[1]<<endl;
    cout<<v[2]<<endl;
    cout<<v[0][0]<<endl;
    cout<<v[1][0]<<endl;
    cout<<v[2].length()<<endl;
    return 0;
}
  • string型別的數字化處理
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   s="13243512345";
   int sum=0;
   for(int i=0;i<s.length();i++){
       if(s[i]=='0')sum+=0;
       else if(s[i]=='1')sum+=1;
       else if(s[i]=='2')sum+=2;
       else if(s[i]=='3')sum+=3;
       else if(s[i]=='4')sum+=4;
       else if(s[i]=='5')sum+=5;
       else if(s[i]=='6')sum+=6;
       else if(s[i]=='7')sum+=7;
       else if(s[i]=='8')sum+=8;
       else if(s[i]=='9')sum+=9;
   }
   cout<<sum<<endl;
return 0;
}
  • string物件與字元陣列互操作
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s;
   char ss[1000];
//輸入字元到字元陣列
   scanf("%s",&ss);
   s=ss;
//用printf輸出字串物件,要採用c_str()方法
   printf(s.c_str());
   cout<<endl;
   printf("%s",ss);
   cout<<endl;
   cout<<s<<endl;
   cout<<ss<<endl;
return 0;
}
  • string物件與sscanf函式
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
using namespace std;
int main(int argc,char*argv[])
{
   string s1,s2,s3;
   char sa[1000],sb[1000],sc[1000];
//將字串分離成子串
   sscanf("abc 123 ABC","%s %s %s",sa,sb,sc);
   s1=sa;
   s2=sb;
   s3=sc;
   cout<<s1<<" "<<s2<<" "<<s3<<endl;
   int a,b,c;
//將字串分離成數字跟scanf一樣
   sscanf("12 34 56","%d %d %d",&a,&b,&c);
   cout<<a<<" "<<b<<" "<<c<<endl;
   int x,y,z;
   sscanf("21,43$65","%d,%d$%d",&x,&y,&z);
   cout<<x<<" "<<y<<" "<<z<<endl;
   return 0;
}
  • string物件與數值相互轉換
#include<string>
#include <iostream>
#include<algorithm>
#include<cstdio>
#include <cctype>
#include<sstream>
using namespace std;
//將數值轉換為字串 C++方法
string convertToString(double x)
{
    ostringstream o;
    if(o<<x)
    return o.str();
    return "conversion error";
}
//將字串轉換為數值 C++方法
double convertFromString(const string &s)
{
    istringstream i(s);
    double x;
    if(i>>x)
    return x;
    return 0.0;
    
}

int main(int argc,char*argv[])
{
//將數值轉換為string的第一種方法:c方法
   char b[10];
   string a;
   sprintf(b,"%d",1975);
   a=b;
   cout<<a<<endl;
//將數值轉換為string的第一種方法:c++方法
   string cc=convertToString(1976);
   cout<<cc<<endl;
   string dd="4324";
//將字串轉換為數值的方法:C++方法
   int p=convertFromString(dd)+2;
   cout<<p<<endl;
    return 0;
}