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长度,要复制的字符串

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