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
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