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

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值