众所周知,C++中有两种类型类型的字符串,一种是
STL的string容器
,另一种是
char类型的数组
。
一.基本区别
要说最基本的区别,就是
string可以包含多个字符,char类型只有1个字符
,且分别用
双引号
和
单引号
:
string temp1="7371";
char c='3';
char temp2[5]="7166";
联系在于,string类型支持通过下标访问,
对于string每一位,都是char类型的字符而非string字符串!
string temp;
for(int i=0;i<=2;i++)
{
temp[i]='*';
cout<<temp[i];
}
如上述代码,将string的每一位用
‘*’
字符赋值。
虽然string的每一位为char型的字符,而并非string类型的字符串,
但string类型可以采用“+”运算符拼接
string字符串,或者char型字符
。如下,三种赋值方式均正确!
temp+="jsl&hyh";
temp5+="*";
temp5+='*';
注意,char类型的数组不能使用这种“+”的运算方式扩容。
二.与vector容器混用
对于vector<string>和vector<char>两种类型,在用法上面存在一定的区别。
vector<string> S1;
vector<char> C1;
for(int i=1;i<=7;i++)
{
string temp;
cin>>temp;
S1.push_back(temp);
cout<<S1[i-1];
}
cout<<endl;
for(int i=1;i<=7;i++)
{
char temp;
cin>>temp;
C1.push_back(temp);
cout<<C1[i-1];
}
如上述一段代码,虽然容量均为7,但
string类型的vector明显可以存放更多的字符
,而char类型的上限仅有7。即便存放相同的7位字符串“
jsl&hyh
”,意义此处也不同:对于string类型的,每一个j,s等元素,
都是单独的一位字符串
,而
char中的每一个元素仅仅是字符
!这是一个初学者经常容易混淆的内容。
此外,还有一个容易混淆的地方:
char类型的数组可以作为字符串被处理,因而可以压入vector<string>之中
;而反过来,vector<string>中的每一个元素仍为字符串,因此不能当做字符处理。
string temp1="7371";
char temp2[5]="7166";
S1.push_back(temp1);
S1.push_back(temp2);
//S1为 vector<string>型
如上就是本贴的全部内容,如下是完整版的代码,因为很多代码都是做试验,看起来有些凌乱,大家自行根据注释阅读。
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
vector<string> S1;
vector<char> C1;
for(int i=1;i<=7;i++)
{
string temp;
cin>>temp;
S1.push_back(temp);
cout<<S1[i-1];
}
cout<<endl;
for(int i=1;i<=7;i++)
{
char temp;
cin>>temp;
C1.push_back(temp);
cout<<C1[i-1];
}
string temp1="7371";
char temp2[5]="7166";
//注:采用这种方式赋值,需要将内存多于字符串一位
char temp3='3';
S1.push_back(temp1);
S1.push_back(temp2);
//string型的vector,可以将char类型的数组压入
//而采用单引号的char字符,则不能压入!
string temp4=S1[2];
//注意:vector<string>型的每一位,仍然为字符串型,而不是char类型,此处temp4如果为char型会报错!
S1.push_back(temp4);
//同理,此处如果为char型的vector,则无法压入!
string temp5;
for(int i=0;i<=2;i++)
{
temp5[i]='*';
//注意:另一个很微妙的地方:
//string的每一位为char型!但是如果是vector<string>型,每一位则为char!千万不要混淆
temp5+=S1[i];
temp5+="*";
temp5+='*';
//但如果是+运算符,起到的是字符串拼接的作用
//因此虽然S1[i]是字符串型,temp5仍可以与字符串直运算
cout<<temp5[i];
}
char temp6[5]="7371";
for(int i=1;i<=3;i++)
{
// temp6+='4';
//char型字符数组不能使用“+”操作符
}
return 0;
}