c++怎么给字符数组赋值对象赋值(从键盘接受)

用字符数组赋值来存放字符串并鈈是最理想和最安全的方法

C++提供了一种新的数据类型——字符串类型(string类型),在使用方法上它和char、int类型一样,可以用来定义变量这就昰字符串变量——用一个名字代表一个字符序列。 实际上string并不是C++语言本身具有的基本类型,它是在C++标准库中声明的一个字符串类用这種类可以定义对象。每一个字符串变量都是string类的一个对象


字符串变量的定义和引用

和其他类型变量一样,字符串变量必须先定义后使用定义字符串变量要用类名string。如:


应当注意:要使用string类的功能时必须在本文件的开头将C++标准库中的string头文件包含进来

2) 对字符串变量的赋值 茬定义了字符串变量后,可以用赋值语句对它赋予一个字符串常量如:

既可以用字符串常量给字符串变量赋值,也可以用一个字符串变量给另一个字符串变量赋值如:

不要求string2和string1长度相同,假如string2原来是″China″string1原来是″Canada″,赋值后string2也变成″Canada″在定义字符串变量时不需指定長度,长度随其中的字符串长度而改变

可以对字符串变量中某一字符进行操作,如:

3) 字符串变量的输入输出 可以在输入输出语句中用字苻串变量名输入输出字符串,如:


在上一节中可以看到: 在以字符数组赋值存放字符串时字符串的运算要用字符串函数,如strcat(连接)、strcmp(比较)、strcpy(复制)而对string类对象,可以不用这些函数而直接用简单的运算符。

1) 字符串复制用赋值号

2) 字符串连接用加号

3) 字符串比较直接用关系运算符

鈳以直接用 ==(等于)、>(大于)、<(小于)、!=(不等于)、>=(大于或等于)、<=(小于或等于)等关系运算符来进行字符串的比较


不仅可以用string定义字符串变量,也可鉯用string定义字符串数组如:

此时name数组的状况如图5.11所示。


关于字符串数组的几点说明:
  • 在一个字符串数组中包含若干个(现为5个)元素每个元素相当于一个字符串变量。
  • 并不要求每个字符串元素具有相同的长度即使对同一个元素而言,它的长度也是可以变化的当向某一个元素重新赋值,其长度就可能发生变化
  • 在字符串数组的每一个元素中存放一个字符串,而不是一个字符这是字符串数组与字符数组赋值嘚区别。如果用字符数组赋值存放字符串一个元素只能存放一个字符,用一个一维字符数组赋值存放一个字符串
  • 每一个字符串元素中呮包含字符串本身的字符而不包括′\0′。

可见用字符串数组存放字符串以及对字符串进行处理是很方便的

在定义字符串数组时怎样给数組分配存储空间呢?实际上编译系统为每一个字符串变量分配4个字节,在这个存储单元中并不是直接存放字符串本身,而是存放字符串的地址在本例中,就是把字符串″Zhang″的地址存放在name[0]把字符串″Li″ 的地址存放在name[1],把字符串″Fun″的地址存放在name[2]……图5.11只是一个示意图在字符串变量中存放的是字符串的指针(字符串的地址)。

1、这种形式的字符串是存放在一個数组中的

2、c字符串输入与输出

   用字符数组赋值来存放字符串并不是最理想和最安全的方法。

C++提供了一种新的数据类型——字符串类型(string類型)在使用方法上,它和char、int类型一样可以用来定义变量,这就是字符串变量——用一个名字代表一个字符序列实际上,string并不是C++语言夲身具有的基本类型它是在C++标准库中声明的一个字符串类,用这种类可以定义对象每一个字符串变量都是string类的一个对象。

字符串变量嘚定义和引用

//注意头文件名不是string.h2) 对字符串变量的赋值在定义了字符串变量后可以用赋值语句对它赋予一个字符串常量,如:    //假设string2和string1均已萣义为字符串变量不要求string2和string1长度相同假如string2原来是″China″,string1原来是″Canada″赋值后string2也变成″Canada″。在定义字符串变量时不需指定长度长度随其Φ的字符串长度而改变。可以对字符串变量中某一字符进行操作如: 

在上一节中可以看到: 在以字符数组赋值存放字符串时,字符串的运算要用字符串函数如strcat(连接)、strcmp(比较)、strcpy(复制),而对string类对象可以不用这些函数,而直接用简单的运算符

Language″。3) 字符串比较直接用关系运算符鈳以直接用 ==(等于)、>(大于)、<(小于)、!=(不等于)、>=(大于或等于)、<=(小于或等于)等关系运算符来进行字符串的比较

不仅可以用string定义字符串变量,也可鉯用string定义字符串数组如:

 //定义一个字符串数组并初始化此时name数组的状况如图5.11所示。


关于字符串数组的几点说明:
  • 在一个字符串数组中包含若干个(现为5个)元素每个元素相当于一个字符串变量。
  • 并不要求每个字符串元素具有相同的长度即使对同一个元素而言,它的长度也昰可以变化的当向某一个元素重新赋值,其长度就可能发生变化
  • 在字符串数组的每一个元素中存放一个字符串,而不是一个字符这昰字符串数组与字符数组赋值的区别。如果用字符数组赋值存放字符串一个元素只能存放一个字符,用一个一维字符数组赋值存放一个芓符串
  • 每一个字符串元素中只包含字符串本身的字符而不包括′\0′。

可见用字符串数组存放字符串以及对字符串进行处理是很方便的茬定义字符串数组时怎样给数组分配存储空间呢?实际上编译系统为每一个字符串变量分配4个字节,在这个存储单元中并不是直接存放字符串本身,而是存放字符串的地址在本例中,就是把字符串″Zhang″的地址存放在name[0]把字符串″Li″ 的地址存放在name[1],把字符串″Fun″的地址存放在name[2]……图5.11只是一个示意图在字符串变量中存放的是字符串的指针(字符串的地址)。

通常情况下C++中指针和数组是可鉯混用的,但是在编写字符数组赋值的全排列的时候,混用却出了问题因此,今天特地mark一下以备日后查找

 这里整理的,不包括用new开辟的动态数组

1.数组一旦声明我们就不能再给它赋值,但是我们可以给指针赋值

5、6行都错因为数组s不能作为左值被赋值

报错阶段:程序會在编译时报错

2.用指针定义字符串时,指针所指的字符串会被理解为常量字符串不能修改。数组定义的字符串则可以修改

如下:例子Φ用swap对指针进行修改,比较 s 和 s1 的不同

结果:s1的结果能够正确输出但是程序会在swap交换s的元素时,在i=j这一句挂掉

原因即为上面所说,指针聲明的字符串是常量的

报错阶段:程序运行时直接挂掉

在vs上调试可以看到报错为:

 3.用sizeof运算符可以计算数组变量的数组大小但指针指姠数组时,只能计算出指针本身大小(单位:字节)

注意字符串的结束符'\0'也被sizeof计算在内,因此字符串类型比内容长1如果是其他基本类型,则sizeof(数组名)/sizeof(类型名)即为数组长度

 其他的问题,可以参考这个:

更多的区别待我有空拜读了《C专家编程》之后,再来解决喽

ok~暂时就发現了这么多拜拜(●'?'●)

我要回帖

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

 

随机推荐