C++:char和string的区别

char *s1; //s1是指向字符串的指针
char s2[ ]; //s2是字符类型的一维数组
string s3; //s3是string类的对象

关于char[]和char*的区别主要在于赋值和大小,具体可以参考https://www.cnblogs.com/leixiaojun/articles/10591938.html

在具体使用上,char[]和string主要有以下区别需要注意

01 头文件

#include<cstring>  //char
#include<string>   //string

02 定义和赋值

这里需要注意的是,已经定义的char数组,不可以通过ch1=ch2进行赋值,而应当使用strcpy函数
而string类型字符串则无此要求

char []

char ch1[30],ch2[30];
cin>>ch1;
ch2=ch1; //错误(报错:char表达式必须是可修改的左值),即只有在定义时char数组可以用“=”   

char ch3[] = "give me";
char ch4[] = "a cup";
strcpy(ch3,ch4);
cout<<"ch3="<<ch3<<endl;  //输出结果 ch3=a cup

string

string str1,str2;
cin>>str1;
str2=str1;  //正确,string类型可以使用“=”

string str3 = "give me";
string str4 = "a cup";
str3.assign(str4,0,5);       // 第2个参数“0”为起始位置,第3个参数“5”为字符数
 cout<<"str3="<<str3<<endl;  //输出结果 str3=a cup

03 合并

char[] 需要通过strcat函数实现
而string则可以通过“+”,简单实现

全部合并

char[]

char ch1[15] = "give me "; // 注意长度,避免越界,合并后为13
char ch2[] = "a cup";
strcat(ch1,ch2);   //strcat()将字符串ch2接到ch1后面
cout<<"ch1="<<ch1<<endl;  //输出结果 ch1=give me a cup

string

string str1 = "give me ";
string str2 = "a cup";
str1 = str1 + str2;
cout<<"str1="<<str1<<endl;  输出结果 str1=give me a cup

部分合并

char[]

char ch1[10] = "ab";  // 注意合并后的长度
char ch2[] = "abc";
strncat(ch1,ch2,3);    // 参数3为从起始位置起的字符数
cout<<"ch1="<<ch1<<endl;  //输出结果 ch1=ababc

string

string str1 = "ab";
string str2 = "cdefg";
str1.append(str2,2,3); // 参数2为数组下标,参数3为参数2后字符数。即将str2从下标为2位置起3个字符合并到str1
cout<<"str1="<<str1<<endl;  //输出结果 str1=abefg

04 字符串长度获取

char[]使用函数strlen获取字符串长度
string使用.size或.length获取,也可以先转换为char[]再获取长度

char[]

char ch1[] = "give me";
int m = strlen(ch1);  //不包括‘\0’
cout<<"m="<<m<<endl; //输出结果:m=7
 

string

  string str1 = "give me";
  ①int m = strlen(str1.c_str());  
     cout<<"m="<<m<<endl;//输出结果:m=7
     
  ②int n = str1.size();
     cout<<"n="<<n<<endl; //输出结果: n=7 

  ③int k = str1.length();
     cout<<"k="<<k<<endl;//输出结果:k=7

参考:C++ string类型的字符串长度获取的三种方法

05 替换

char[]

char ch1[10] = "ab";
  char ch2[] = "cdefg";
  strncpy(ch1,ch2,3);       // 拷贝ch2起始位置后3个字符赋给ch1
  cout<<"ch1="<<ch1<<endl; //输出结果:ch1=cde

string

string str1 = "ab";
  string str2 = "cdefgh";
  str1.replace(0,1,str2,4,2);  // 将str2从下标4开始2个字符替换掉str1中从起始位置开始1个字符
                // replace函数可重载,有多种形式,也支持Char型字符替换
  cout<<"str1="<<str1<<endl;//输出结果:str1=ghb
  

06 获取整行输入

cin>>words;会在读入空格时则认为字符串停止,可以使用getline函数使字符串获得整行输入的字符,但char一维数组和string使用上有所区别

string str;
getline(cin,str);//读入string

char str2[1024];
cin.getline(str2,1024);//读入char数组

07 其余操作的函数区别

详见https://blog.csdn.net/chunjiekid/article/details/796220
https://www.cnblogs.com/HaoQChen/p/11048607.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值