C++String 和 char类型的区别和用法辨析

  • Post author:
  • Post category:其他


众所周知,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;
}



版权声明:本文为jsl123x原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。