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

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

如上述代码,将string的每一位用'*'字符赋值。

        虽然string的每一位为char型的字符,而并非string类型的字符串,但string类型可以采用“+”运算符拼接string字符串,或者char型字符。如下,三种赋值方式均正确!

		temp+="jsl&hyh";
		temp5+="*";
		temp5+='*';

注意,char类型的数组不能使用这种“+”的运算方式扩容。

二.与vector容器混用

对于vector和vector两种类型,在用法上面存在一定的区别。

vector S1;
	vector C1;
	for(int i=1;i<=7;i++)
	{
		string temp;
		cin>>temp;
		S1.push_back(temp);
		cout<>temp;
		C1.push_back(temp);
		cout<

        如上述一段代码,虽然容量均为7,但string类型的vector明显可以存放更多的字符,而char类型的上限仅有7。即便存放相同的7位字符串“jsl&hyh”,意义此处也不同:对于string类型的,每一个j,s等元素,都是单独的一位字符串,而char中的每一个元素仅仅是字符!这是一个初学者经常容易混淆的内容。

        此外,还有一个容易混淆的地方:char类型的数组可以作为字符串被处理,因而可以压入vector之中;而反过来,vector中的每一个元素仍为字符串,因此不能当做字符处理。

string temp1="7371";
char temp2[5]="7166";

S1.push_back(temp1);
S1.push_back(temp2);
//S1为 vector

如上就是本贴的全部内容,如下是完整版的代码,因为很多代码都是做试验,看起来有些凌乱,大家自行根据注释阅读。

#include 
#include 

using namespace std;

int main(int argc, char** argv) 
{
	
	vector S1;
	vector C1;
	for(int i=1;i<=7;i++)
	{
		string temp;
		cin>>temp;
		S1.push_back(temp);
		cout<>temp;
		C1.push_back(temp);
		cout<型的每一位,仍然为字符串型,而不是char类型,此处temp4如果为char型会报错! 
	S1.push_back(temp4);
	//同理,此处如果为char型的vector,则无法压入! 
	
	string temp5;
	for(int i=0;i<=2;i++)
	{
		temp5[i]='*';
		 
		//注意:另一个很微妙的地方:
		//string的每一位为char型!但是如果是vector型,每一位则为char!千万不要混淆
		temp5+=S1[i];
		temp5+="*";
		temp5+='*';
		//但如果是+运算符,起到的是字符串拼接的作用
		//因此虽然S1[i]是字符串型,temp5仍可以与字符串直运算 
		cout<

你可能感兴趣的:(C++语法基础及经典案例,c++)