char數組;string類的區別

char 是C++內置數組類型
string是標準庫中定義的
char 定義的數組僅僅是儲存字符串,c庫中有一系列操作字符串的函數。
sting是類,它包含一個可變長度的char 數組,封裝了常用的字符串操作函數。

char字符數組存放字符串

用字符數組存放 用字符指針管理串
char str1[ ]=“How are you”; char *str2=“Fine”;

一般我們定義指針變量int *p=&a;
、。雖然char *str2="Fine"但這並不意味着“fine"就是一個指針,實際上我們的這一指令,編譯器在幕後爲我們做了很多,
1.首先常量區分配一個字符數組,(可以看成匿名數組)
2.然後將”Fine"字符串(包括’\0’)拷貝到此數組,
3.然後返回數組首地址,將此地址賦值給字符指針變量str2;
這與C語言沒有字符串類型有關;
通過下面一個例子來驗證

#include<iostream>
using namespace std;
int main(){
 char str1[]="How";
 char *str2="Fine";
 cout<<str1[0]<<" "<<str2[0]<<endl;
 cout<<str1<<str2<<endl;
 cout<<strlen(str1)<<endl;
 cout<<strlen(str2)<<endl;
 }

運行結果在這裏插入圖片描述
strlen( )只計算有效字符個數,空字符不包括在內

strlen(Name);

在這裏插入圖片描述
字符串結束標誌’\0’
cin.get( )或者整行輸入gets( Name) 可以輸入空格
在這裏插入圖片描述
字符串拷貝函數strcpy( )
格式;strcpy(字符串數組1;字符串2)
將字符串2,拷貝到字符數組1中去
不能使用賦值語句爲一個字符數組賦值*

string是c++定義的一種類

string s 默認構造空串
string s2(s1) 由s1複製構造s2
string s( “hello”) 以hello爲初值構造s
s.size() 返回串長
s1=s2 把s1賦值給s2
s.append(ha) 把ha追加到s 之後
s1+s2 把s2連接到s1
s.clear( ) 刪除s的所有字符
string name[5]={"Li Hua","He Xiao","Zhang Li","Sun Fei","Chen Bao"};

string 還可以以char [ ]或char*爲子串

例;

#include<iostream>
#include<cstring>
using namespace std;
int main(){
char d[]="joker";                     //定義char 類字符串
string s(d);                          //以 char[]爲子串創建s 
cout<<s;}

運行如下;
在這裏插入圖片描述
因爲string定義的s,本身就是字符串類型;也不可以用cin>>s;來賦值;

把string對象轉化爲c字符串(char[ ]、char*)

#include<iostream>
#include<cstring>
using namespace std;
int main(){
string s("string object");
int len=s.lenth();                     //獲得長度
char *ptr1=new char[len+1];             //開闢空間
strcpy_s(ptr1,len+1,s.data());          //將s.data複製到ptr1
cout<<"sting is;"<<s<<endl;
cout<<"ptr1 is ;"<<ptr1;
delete []ptr1;

*strcpy_s(Des,Dessize,Src)
若Des爲字符指針參數,之後Des長度,要複製的字符串

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章