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長度,要複製的字符串