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

    原文作者:Jiangsir0
    原文地址: https://blog.csdn.net/m0_48028149/article/details/119377513
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞