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

文章详细介绍了C++中string和char数组的基本区别,包括string可存储多个字符,支持下标访问和字符串拼接,而char数组仅能存储单个字符。同时,文章讨论了vector<string>和vector<char>的使用差异,强调了string类型的vector可以存放多个字符,而char类型的vector受限于单个字符。此外,还指出char数组可以作为字符串被压入vector<string>,但反之不行,并举例说明了相关操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyric群青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值