C++笔记(3)——复合数据类型

1、数组

声明形式:typename arrayname[arraysize];

初始化形式:typename arrayname[arraysize] = {......};

所有元素类型必须相同,大小在声明或初始化时确定,不能使用变量(可以使用new运算符来解决)。

sizeof arrayName得到整个数组的字节数;sizeof arrayName[n]得到数组中一个元素的字节数。

初始化规则1:数组只有在定义时可以初始化,之后就不能使用,也不能将一个数组赋给另一个数组;

初始化规则2:初始化时提供的值的数量可以少于数组的元素数目,后面的元素被赋值为0;

初始化规则3:可以不指定数组的元素数目,编译器自动计算元素个数。

 

2、字符串(C-style)

C风格字符串以char数组存储,特殊性质:以空字符\0(ASCII为0)结尾,例如:

char dog[7] = {'d','o','g',' ','d','o','g'}; 

char cat[7] = {'d','o','g','d','o','g','\0'};       //字符串表示方法1

这两个数组,前者不是字符串(没有以空字符'\0'结尾),后者是字符串(一定要以空格结尾)。

char bird[11] = "Mr. Cheep";或char fish[] = "Bubbles";//字符串表示方法2

这种表示方法称为字符串场常量,隐式的在结尾以空格表示,所以bird的长度为11,一般让编译器自己计算字符串长度。

注意:字符串常量使用双引号,字符常量使用单引号。字符常量存储的是单个字符的Ascii,而字符串常量存储的实际是内存地址。例如:char s = 'S';则s存储的是83。char s = “S”;则s存储的是S和空格符这一字符串的存储地址。

(呀呀呀呀,空格和空字符不一样不一样不一样!!!空字符不能使用键盘输入)

在使用cin输入时,由于不能使用键盘输入空字符,cin便使用空白(空格,制表符和换行符)来确定字符串的结束,存入时自动在结尾加入空字符,这样一来,cin在获取字符数组输入时便只能读取一个单词。为了获取一行,需要使用cin中面向行的类成员函数getline()或get()(他们均是istream的类方法,而cin是istream的对象),这两个函数都以换行符作为输入结束,只是getline()丢弃换行符而get()将换行符保留在输入队列中。使用方法如下:

cin.getline(arrayName,arraySize);//其中arraySize包含空字符,当读到换行符或读取了arraySize-1个字符时即停止读取;

cin.getline(name1,Size1).get(name2,Size2);//读取连续两行,与两次连续调用效果一样。

cin.get(name,size);//只读取一行时域getline()使用方法一样;

cin.get(name1,size1).get(); cin.get(name2,size2).get();//连续读取两行

或cin.get(name1,size1); cin.get(); cin.get(name2,size2);

当读取到空行时,getline将空字符赋给数组,get设置失效位,接下来的输入被阻断;

当输入字符过长时,将余下字符留在输入队列中,getline同时设置失效位以阻断后续输入;

注意,若前面使用了cin,可能输入队列有换行符,应使用cin.get();以消除空行影响。

strlen(arrayName);用于求数组中可见字符的数目,不计算空字符;sizeof(arrayName)计算数组本身的长度。

 

3、字符串(string类)

使用头文件#include <string>;string类位于命名空间std中。

形式:string Name = "string";等方式,不用指定字符串的长度。

可以将一个string对象赋值给另一个string对象;可以直接利用加号(+)将两个字符串拼接为一个。使用Name.size()求长度,与字符数组中strlen()效果一样。

在C语言中,可以使用string.h中的函数对字符数组进行操作:

strcpy(charr1,charr2);//将charr2复制给charr1;

strcat(charr1,charr2);//将charr2附加在charr1末尾;

使用函数对字符数组进行操作时,需要注意数组长度,而C++中使用string类则不需要考虑这个问题。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值