C++中幾種字符串表示方法


  最近學習C++時,被幾種字符串搞的有點亂,這里記錄一下。

  c++中有兩種風格字符串,分別是:

  • C++風格字符串
  • C風格字符串

  它們各自的聲明方式如下:

void main(){
    string a = "hello";    //C++風格
    char *b = "hello";  //C風格
    char c[] = "hello";  //C風格
}

 

C++風格字符串

  string是c++標准庫定義的類型。string支持下標操作,可以修改string中的一部分。同時string可以看作存儲char的vector容器的特化,所以string支持一般的容器操作。

string a="hello“;
a[3] = 's'; //支持下標操作

//通過迭代器輸出首尾元素
cout<<*a.begin();
auto e = a.end();
cout <<*(--e);

C風格字符串

  C風格字符串不是一種類型,而是一種約定俗成的寫法。即字符串放在字符數組中並以空字符結束(’\0‘)。

char ca1[]={'C', '+', '+'}; //沒有以’\0'結尾,非c風格字符串
char ca2[]={'C', '+', '+', '\0'}; // 顯式添加'\0'
char ca3[]="C++"; // 編譯器會自動在末尾添加空字符
char *cp="C++"; // 編譯器會自動在末尾添加空字符

  其中,使用字符數組時,只能在定義的時候初始化,同時,對於字符指針型的字符串(char *str),字符數組可以直接賦值給字符指針型字符串,但反之就不行。

char[10] str_1 = "hello"; //正確
char[10] str_2;
char* str_3 = "world"; str_2
= "hello" //錯誤,此時的str_2是一個數組名,不能這樣賦值 str_2[0] = 'h'; //正確
str_3 = str_1;      //正確
str_1 = str_3;      //錯誤

  

兩種風格字符串間的轉換

  在編程程序的時候,盡量使用string,但有很多時候修改老代碼的時候不得已會用到C風格字符串,所以需要用到兩種風格間字符串的轉換。

  1.C風格字符串轉換為C++風格字符串

  string類能夠自動將C風格字符串轉化為C++風格字符串,也就是說C風格字符串能夠直接賦值給string。

string str_1;
char * str_2 = "hello";
char[] str_3 = "world“;

str_1 = str_2;     //正確
str_1 = str_3;     //正確

  2.C++風格字符串轉換為C風格字符串

  這種轉換需要用到函數c_str,這個函數返回的是一個const *char類型的值。

string str_1 = "hello";
char *str_2 = str_1.c_str();    //錯誤,c_str()返回的是const char*
const char* str_3 = str_1.c_str() ;   //正確

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM