1. 程式人生 > 實用技巧 >string和char型陣列的區別

string和char型陣列的區別

總的來說,string比char[]更耗時,比如apend()這種函式,而string能完成的操作char[]基本都可以實現。

1.賦值

char賦值:

 char ch1[] = "give me";
  char ch2[] = "a cup";
  strcpy(ch1,ch2);
  cout<<"ch1="<<ch1<<endl;

輸出結果:ch1=a cup

string賦值:

 string str1 = "give me";
  string str2 = "a cup";
  ①str1 = str2;
     cout<<"str1="<<str1<<endl;
  ②str1.assign(str2,0,5);       // 引數2為起始位置,引數3為字元數
     cout<<"str1="<<str1<<endl;

輸出結果:str1=a cup
     str1=a cup

2.合併(全部)

char合併(全部):
  

char ch1[15] = "give me "; // 注意長度,合併後為13
  char ch2[] = "a cup";
  strcat(ch1,ch2);
  cout<<"ch1="<<ch1<<endl;

輸出結果:ch1=give me a cup

string合併(全部)

string str1 = "give me ";
  string str2 = "a cup";
  str1 = str1 + str2;
  cout<<"str1="<<str1<<endl;

輸出結果:str1=give me a cup

3.合併(部分)

char合併(部分):

  char ch1[10] = "ab";  // 注意合併後的長度
  char ch2[] = "abc";
  strncat(ch1,ch2,3);    // 引數3為從起始位置起的字元數
  cout<<"ch1="<<ch1<<endl;

輸出結果:ch1=ababc

string合併(部分):

  string str1 = "ab";
  string str2 = "cdefg";
  str1.append(str2,2,3); // 引數2為陣列下標,引數3為引數2後字元數。即將str2從下標為2位置起3個字符合併到str1
  cout<<"str1="<<str1<<endl;
  

輸出結果:str1=abefg  

4.測長

char測長:

 char ch1[] = "give me";
  int m = strlen(ch1);  //不包括‘\0’
  cout<<"m="<<m<<endl;


輸出結果:m=7

string測長:

  string str1 = "give me";
  ①int m = strlen(str1.c_str());
     cout<<"m="<<m<<endl;
  ②int n = str1.size();
     cout<<"n="<<n<<endl;
  ③int k = str1.length();
     cout<<"k="<<k<<endl;
     

輸出結果:m=7
     n=7
   k=7

5.替換

char替換:

char ch1[10] = "ab";
  char ch2[] = "cdefg";
  strncpy(ch1,ch2,3);       // 拷貝ch2起始位置後3個字元賦給ch1
  cout<<"ch1="<<ch1<<endl;
  

輸出結果:ch1=cde

string替換:

 string str1 = "ab";
  string str2 = "cdefgh";
  str1.replace(0,1,str2,4,2);  // 將str2從下標4開始2個字元替換掉str1中從起始位置開始1個字元
                // replace函式可過載,有多種形式,也支援Char型字元替換
  cout<<"str1="<<str1<<endl;
  

輸出結果:str1=ghb

6.拷貝

char拷貝:

char ch1[10] = "abc";
  char ch2[] = "de";
  memmove(ch1,ch2,2); //將ch2從起始位置起兩個字元賦給ch1
  cout<<"ch1="<<ch1<<endl;
  

輸出結果:ch1=dec

string拷貝:

string str1 = "abc";
  char ch2[10] = "defg";
  str1.copy(ch2,10,1);    // copy函式的第一個引數只能為char型別
               // 將str1從下標1位置開始的10個字元賦給ch2
  cout<<"ch2="<<ch2<<endl;
  

輸出結果:ch2=bcfg

7.插入

string str1 = "1278";
  string str2 = "3456";
  str1.insert(2,str2,0,4);   // 在str1下標為2的位置插入str2起始位置後4個字元
  cout<<"str1="<<str1<<endl;
  

輸出結果:str1=12345678

8.刪除

string str("give me");
  str.erase(2,2); // 刪除從下標為2位置起兩個字元
  cout<<"str="<<str<<endl;
  str.erase(2);  // 刪除下標為2位置後全部字元
  cout<<"str="<<str<<endl;
  str.erase();    // 刪除所有字元
  cout<<"str="<<str<<endl;
  

輸出結果:str=gi me
     str=gi
     str=

9.查詢

string str("Hello worldw");
  int m = str.find('w',0);   // 從str起始位置開始查詢w字元
  cout<<"m="<<m<<endl;
  int n = str.find_first_not_of('w',0);  // 查詢str起始位置開始不是w的字元
  cout<<"n="<<n<<endl;
  int k = str.find_first_of('w',0);  // 從str起始位置開始查詢第一個w字元
  cout<<"k="<<k<<endl;
  int l = str.find_last_of('w');   // 查詢最後一個w的位置
  cout<<"l="<<l<<endl;
  int p = str.find_last_not_of('w');  // 查詢最後一個不是w的字元的位置
  cout<<"p="<<p<<endl;
  int q = str.rfind('w'); // 反向查詢
  cout<<"q="<<q<<endl;
  

輸出結果:m=6
     n=0
     k=6
     l=11
     p=10
     q=11

10.比較

string str1 = "155";
  string str2 = "52";
  char c[] = "34";
  char c2[]= "56";
  int z = strncat(c,c1);//用來比較兩個char陣列是否相等

   int i = str1.compare(str2);
  cout<<"i="<<i<<endl;  // 輸出i=-1
  int j = str2.compare(c); // string字串可以與char字元比較
  cout<<"j="<<j<<endl; // 輸出j=1
  int l = str1.compare(0,2,str2); // 比較前兩個字元
  cout<<"l="<<l<<endl; // 輸出l=-1;
  int k = str1.compare(1,1,str2,0,1); // str1下標為1位置字元與str2下標為0位置字元比較
  cout<<"k="<<k<<endl; // 輸出k=0
  int m = str1.compare(1,1,c,0,1);
  cout<<"m="<<m<<endl;// 輸出m=1
  int n = str1.compare(1,1,c,1);
  cout<<"n="<<n<<endl; // 輸出n=1

11.判空

string str = "";
  if(str.empty())

12.轉換(string轉字元陣列)

string str1 = "Hello World";
  const char* ch1;
  ch1 = str1.c_str();

13.交換

char交換:

char ch1[15] = "ofru";
  char ch2[15] = "";
  swab(ch1,ch2,strlen(ch1));  // 將ch1奇偶對調後傳入ch2
  cout<<"ch2="<<ch2<<endl;

輸出結果:ch2=four

string交換:

  string str1 = "four";
  string str2 = "";
  str1.swap(str2);
  cout<<"str2="<<str2<<endl;

輸出結果:str2=four