C++字符数组怎么赋值?求所有方法

如题所述

用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。字符数组具有数组的共同属性。由于字符串应用广泛,C和C++专门为它提供了许多方便的用法和函数。

一、字符数组的定义和初始化
定义字符数组的方法与前面介绍的类似。例如
char c[10];
c[0]=′I′;c[1]=′ ′;c[2]=′a′;c[3]=′m′;c[4]=′ ′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;
c[9]=′y′;
上面定义了c为字符数组,包含10个元素。在赋值以后数组的状态如图5.7所示。

图5.7

对字符数组进行初始化,最容易理解的方式是逐个字符赋给数组中各元素。如
char c[10]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′};
把10个字符分别赋给c[0]~c[9]这10个元素。

如果花括号中提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符。如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。如
char c[]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′};
也可以定义和初始化一个二维字符数组,如
char diamond[5][5]={{′ ′,′ ′,′*′},{′ ′, ′*′,′ ′,′*′},{′*′,′ ′,′ ′,′ ′,′*′},{′ ′,′*′,′ ′,′*′},{′ ′,′ ′,′*′}};

二、字符数组的赋值与引用
只能对字符数组的元素赋值,而不能用赋值语句对整个数组赋值。如
char c[5];
c={′C′,′h′,′i′,′n′,′a′}; //错误,不能对整个数组一次赋值
c[0]=′C′; c[1]=′h′;c[2]=′i′;c[3]=′n′;c[4]=′a′; //对数组元素赋值,正确

如果已定义了a和b是具有相同类型和长度的数组,且b数组已被初始化,请分析:
a=b; //错误,不能对整个数组整体赋值
a[0]=b[0]; //正确,引用数组元素

例5.9 设计和输出一个钻石图形。
#include <iostream>
using namespace std;
void main( )
{
char diamond[][5]={{′ ′,′ ′,′*′},{′ ′,′*′,′ ′,′*′},{′*′,′ ′,′ ′,′ ′,′*′},{′ ′,′*′,′ ′,′*′},{′ ′,′ ′,′*′}};
int i,j;
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
cout<<diamond[i][j]; //逐个引用数组元素,每次输出一个字符
cout<<endl;
}
}
运行结果为
*
* *
* *
* *
*追答

附图

追问

我是说,在数组已经初始化完之后,怎么把字符串一次性赋给数组?

追答

memcpy or memcpy_s 这是拷贝字符数组

memset or memset_s 这是赋值字符数组

追问

成功了。问一下,c++里没有类似php里面echo "aa"+"bb"输出aabb那样的字符串连接符吗?

追答

直接用+号连起来。

或者用指针来操作也可以。

追问

好像操作字符数组不行呀,根本通不过编译

追答

针对字符串用+号,数组肯定不行,没直接调用的函数,自己写一个吧。
我大概写个伪代码给你,我没有调试过,你自己改一下,最后记得用完p,要delete[] p。
char* func(char* a,int alength,char* b,int blength)
{
char *p=new char[alength+blength];
if(p!=NULL)
{
memcpy_s(p,a,alength);
memcpy_s(p+alength,b,blength);
}
return p;
}

追问

晕。。这么复杂呀~学习了。

追答

把指针学好,数组操作随便你怎么搞都没有问题!加油吧。

追问

嗯!

温馨提示:答案为网友推荐,仅供参考
相似回答