C++中,对二维字符串数组赋值值是出错

深入解析C++中的字符数组和处理字符串的方法
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了深入解析C++中的字符数组和处理字符串的方法,需要的朋友可以参考下
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个元素。在赋值以后数组的状态如图所示。
对字符数组进行初始化,最容易理解的方式是逐个字符赋给数组中各元素。如
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]; //正确,引用数组元素
【例】设计和输出一个钻石图形。
#include &iostream&
void main( )
char diamond[][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
for (i=0;i&5;i++)
for (j=0;j&5;j++)
cout&&diamond[i][j]; //逐个引用数组元素,每次输出一个字符
C++处理字符串的方法—字符串类与字符串变量
用字符数组来存放字符串并不是最理想和最安全的方法。
C++提供了一种新的数据类型——字符串类型(string类型),在使用方法上,它和char、int类型一样,可以用来定义变量,这就是字符串变量——用一个名字代表一个字符序列。
实际上,string并不是C++语言本身具有的基本类型,它是在C++标准库中声明的一个字符串类,用这种类可以定义对象。每一个字符串变量都是string类的一个对象。
字符串变量的定义和引用
1) 定义字符串变量
和其他类型变量一样,字符串变量必须先定义后使用,定义字符串变量要用类名string。如:
string string1; //定义string1为字符串变量
string string2=″China″; //定义string2同时对其初始化
应当注意:要使用string类的功能时,必须在本文件的开头将C++标准库中的string头文件包含进来,即应加上
#include &string& //注意头文件名不是string.h
2) 对字符串变量的赋值
在定义了字符串变量后,可以用赋值语句对它赋予一个字符串常量,如:
string1=″Canada″;
既可以用字符串常量给字符串变量赋值,也可以用一个字符串变量给另一个字符串变量赋值。如:
string2=string1; //假设string2和string1均已定义为字符串变量
不要求string2和string1长度相同,假如string2原来是″China″,string1原来是″Canada″,赋值后string2也变成″Canada″。在定义字符串变量时不需指定长度,长度随其中的字符串长度而改变。
可以对字符串变量中某一字符进行操作,如:
string word=″Then″; //定义并初始化字符串变量word
word[2]=′a′; //修改序号为2的字符,修改后word的值为″Than″
3) 字符串变量的输入输出
可以在输入输出语句中用字符串变量名,输入输出字符串,如:
cin&& string1; //从键盘输入一个字符串给字符串变量string1
cout&& string2; //将字符串string2输出
字符串变量的运算
在上一节中可以看到: 在以字符数组存放字符串时,字符串的运算要用字符串函数,如strcat(连接)、strcmp(比较)、strcpy(复制),而对string类对象,可以不用这些函数,而直接用简单的运算符。
1) 字符串复制用赋值号
string1=string2;
其作用与“strcpy(string1,string2);”相同。
2) 字符串连接用加号
string string1=″C++″; //定义string1并赋初值
string string2=″Language″;//定义string2并赋初值
string1=string1 + string2;//连接string1和string2
连接后string1为″C++ Language″。
3) 字符串比较直接用关系运算符
可以直接用 ==(等于)、&(大于)、&(小于)、!=(不等于)、&=(大于或等于)、&=(小于或等于)等关系运算符来进行字符串的比较。
字符串数组
不仅可以用string定义字符串变量,也可以用string定义字符串数组。如:
string name[5]; //定义一个字符串数组,它包含5个字符串元素
string name[5]={″Zhang″, ″Li″, ″Fun″, ″Wang″, ″Tan″}; //定义一个字符串数组并初始化
此时name数组的状况如图所示。
关于字符串数组的几点说明:
在一个字符串数组中包含若干个(现为5个)元素,每个元素相当于一个字符串变量。
并不要求每个字符串元素具有相同的长度,即使对同一个元素而言,它的长度也是可以变化的,当向某一个元素重新赋值,其长度就可能发生变化。
在字符串数组的每一个元素中存放一个字符串,而不是一个字符,这是字符串数组与字符数组的区别。如果用字符数组存放字符串,一个元素只能存放一个字符,用一个一维字符数组存放一个字符串。
每一个字符串元素中只包含字符串本身的字符而不包括′\0′。
可见用字符串数组存放字符串以及对字符串进行处理是很方便的。
在定义字符串数组时怎样给数组分配存储空间呢?实际上,编译系统为每一个字符串变量分配4个字节,在这个存储单元中,并不是直接存放字符串本身,而是存放字符串的地址。在本例中,就是把字符串″Zhang″的地址存放在name[0],把字符串″Li″ 的地址存放在name[1],把字符串″Fun″的地址存放在name[2]……上只是一个示意图。在字符串变量中存放的是字符串的指针(字符串的地址)。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具只需一步,快速开始
后使用快捷导航没有帐号?
查看: 768|回复: 9
字符数组问题!!
签到天数: 98 天[LV.6]常住居民II
马上注册加入鱼C,享用更多服务吧^_^
才可以下载或查看,没有帐号?
本帖最后由 夜雨de街灯 于
00:14 编辑
为什么我定义一个字符数组a的长度为1,可是我输入四个字符也没有问题,直到输入五个字符才会报错!!
不要让我去百度,百度搜不到....
以下是代码:
#include &stdio.h&
void main(void)
{
& & char a[1];
& & & & printf(&%d\n&,sizeof(a));& & & & & & & & //& & & & a数组为多少字节
& & & & printf(&input string:\n&);
& & & & scanf(&%s&,a);& & & & & & & & & & & & & & & & & & & & //输入字符串
& & & & printf(&%s\n&,a);& & & & & & & & & & & & & & & & //输出字符串
}复制代码
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 919 天[LV.10]以坛为家III
申请一个车位,停了5辆车,别人来了,砸了你乱停的车
我很赞同!: 5 &
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 98 天[LV.6]常住居民II
申请一个车位,停了5辆车,别人来了,砸了你乱停的车
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 98 天[LV.6]常住居民II
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 98 天[LV.6]常住居民II
申请一个车位,停了5辆车,别人来了,砸了你乱停的车
难道申请一个车位,停了4辆车,别人就不来砸你乱停的车?
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 919 天[LV.10]以坛为家III
难道申请一个车位,停了4辆车,别人就不来砸你乱停的车?
只是人家没来得及砸那么多,你申请一个车位,理论上超过你申请的,都是不安全的,但是由于内存对齐,都是4的倍数所以人家暂时没砸你申请1后面的3辆(侥幸而已),要停多少车就最少要申请多少车位,这样比较安全
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 919 天[LV.10]以坛为家III
难道申请一个车位,停了4辆车,别人就不来砸你乱停的车?
只是人家没来得及砸那么多,你申请一个车位,理论上超过你申请的,都是不安全的,但是由于内存对齐,都是4的倍数所以人家暂时没砸你申请1后面的3辆(侥幸而已),要停多少车就最少要申请多少车位,这样比较安全
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 123 天[LV.7]常住居民III
数据的溢出。。。。
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 98 天[LV.6]常住居民II
数据的溢出。。。。
为什么打四个进去没有溢出
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
•••(
Powered byC++字符数组与字符串赋值问题_百度知道
C++字符数组与字符串赋值问题
memset(str, 0, 20);strcat(str, s.data());
strcpy(str, s.data()); 或者int i = 0;for(i = 0; i & s.size(); i++){
str[i] = s.at(i);} str[i] = 0;
其他类似问题
为您推荐:
提问者采纳
strcpy(str, s.c_str());
提问者评价
字符数组的相关知识
其他5条回答
strcpy(c, s.c+str());
把string转换成char然后strcpy。
strcpy(str,s);
for(int i=0;i&s.length();i++){str[i]=s[i];}
strcpy(str,s);
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C++中如何将字符串赋值给数组?
[问题点数:20分,结帖人jcjunjin]
C++中如何将字符串赋值给数组?
[问题点数:20分,结帖人jcjunjin]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。在c++中,如何定义字符串数组?如何访问字符串数组中的元素?
比如说你要定义一个字符型的:char A[20]="你要写的字符串".一个字符串能够在定义字符数组时作为初始化数据被存入到数组中,但不能通过赋值表达式直接赋值.例如:char mark[10];mark=''C program''; /*赋值不合法*/而正确的:char word[20] = “Dictionary”char name[ ] = “Tommy”char c[10] = {‘s’,’t’,’r’,’i’,’n’,’g’,’\0’};最后一个字符’\0’必须有,为字符串结束标志.
为您推荐:
扫描下载二维码}

我要回帖

更多关于 字符串数组赋值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信