一、字符数组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