Day1 字符数组char[]和string字符串赋值

一、字符数组char[]类型赋值
1.当定义了数组大小后,两个数组间可以按位赋值,例如:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	char a[5]={'1','2','3','4'};
	char b[5]; //声明数组b的大小
	for(int i=0;i<5;i++)
	{
		b[i]=a[i];  //按位赋值
	}
	for(int j=0;j<5;j++)
	{
		cout<<b[j]<<" ";  //运行成功
	}
	return 0;
}

2.char型数组整个赋值例如b=a;这种情况会编译不通过,例如:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	char a[5]={'1','2','3','4'};
	char b[5];
	b=a; //整体赋值
	for(int j=0;j<5;j++)
	{
		cout<<b[j]<<" "; //编译不通过报错
	}
	return 0;
}

3.正确的做法应该是调用库函数strcpy来进行拷贝赋值,例如:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	char a[5]={'1','2','3','4'};
	char b[5];
	strcpy(b,a); //将数组a赋值给数组b
	for(int j=0;j<5;j++)
	{
		cout<<b[j]<<" ";
	}
	return 0;
}

二、string的赋值
1.string可以按照位进行赋值,这时可以当做一个char[],但前提是需要赋初始值,例如:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s1="12345";
	string s2;
	for(int i=0;i<5;i++)
	{
		s2[i]=s1[i];
	}
	for(int j=0;j<5;j++)
	{
		cout<<s2[j]<<" ";
	}
	return 0;
}

这种情况下程序执行时会中断,二编译能通过。报错的原因是由于s2初始化时没有赋值,相当于一个空的类,所以s2没有确定字符串大小,所以后面的s2[i]=s1[i]执行时会中断;
2.在对s2初始化之后:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s1="12345";
	string s2="67890";//初始化s2确定s2大小
	for(int i=0;i<5;i++)
	{
		s2[i]=s1[i];
	}
	for(int j=0;j<5;j++)
	{
		cout<<s2[j]<<" ";
	}
	return 0;
}

3.在不对s2进行初始化条件下也可以进行赋值:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s1="12345";
	string s2;
	for(int i=0;i<5;i++)
	{
		s2=s2+s1[i];//着重看着行
	}
	for(int j=0;j<5;j++)
	{
		cout<<s2[j]<<" ";
	}
	return 0;
}

4.另外C++支持字符串整体赋值,直接用等号赋值:

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s1="12345";
	string s2;
	s2=s1;
	for(int j=0;j<5;j++)
	{
		cout<<s2[j]<<" ";
	}
	return 0;
}

总结:
1.char类型按位赋值可以直接使用 = ;
2.char数组要使用strcpy函数,整个一起赋值;
3.string字符串按位赋值为初始化时,不能使用 s2[i]=s1[i] 进行赋值;要使用这样的语句:s2=s2+s1[i]
4.string字符串可以直接使用 = 进行整个字符串的赋值;
————————————————
参考自:https://blog.csdn.net/weixin_43840338/article/details/102788342

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值