C++学习笔记(二)

复合类型(上)://数组与字符串

1.不能讲一个数组赋给另一个数组

2.如果 long total[500] = {0}; 则其中所有的元素都会被置为0;

   如果 long total[500] = {1};则其中只有第一个元素为1,其他元素被编译器置为0;

3.将字符数组初始化为字符串的方法——字符串常量(用引号括起字符串):

  char bird[10]="Mr.X";   char fish[ ]="Bubbles";

  以上隐式包含结尾的空白符'\0';

 4. ‘S’与”S”的区别:‘S’是字符常量;“S”是两个字符即‘S’和‘\0’组成的字符串,且“S”是一个字符串所在的内存地址。

  因此 char shirt_size = "S";  是违法的;

5.当输入串为“Alistair Dreeb”,中间的空格将使得串被默认分为两个,即“Alistair“与”Dreeb”,为了使用cin一次性获取一行数据,可以使用istream中的类,如cin中的类成员函数: getline()与get()函数。

 getline 与get 的区别:

getline()函数读取整行,它通过回车输入的换行来确定输入结尾,使用时可cin.getline()。该函数有两个参数,第一个参数用来存储输入行的数组名称,第二个用来存需要读取的字符数。如果这个参数为20,则函数最多读取19个字符,剩下的空间用于存储自动在结尾处添加的空字符。(它通过换行符来确定行位,但不保存换行符。相反,在存储字符串时,它用空字符来替换换行)

 

get()函数读取时不会丢弃换行符,而是将其留在输入队列。

如对两个数组 name和dessert,arsize=“Alistair Dreeb”,调用cin.get(name,arsize);   cin.get(dessert,arsize);

第一次调用输入队列中仍旧存在换行,因此第二次调用将读取到换行并不再进行后续读取。改进方法为两句中加入cin.get();

用于读取换行符或利用cin.get(name,arsize).get();代替第一句或用cin.getline(name1,arsize).getline(name2,arsizse);来代替第一句和第二句。

6.不能将一个数组赋给另一个数组,但可以将一个string对象赋给另一个string且string类支持直接相加进行粘合。

 扩展用法:strncat(),strncpy()。strcpy和strcat都是C语言风格字符串,因此用g++编译时需要包含头文件<cstring>,而使用string.size()这种用法时,需要包含<string>类

 

7.关于整行字符串获取的两种输入:

当定义字符数组char charr1[20]; 和string类对象 string  str;时可以采取以下两种输入:

  1)cin.getline(charr1,20);

  2)getline(cin,str);

首先,采用strlen(charr1)和str,size()对两个串进行长度计数,第一个长度不固定,因为计算时按照截止到'\0'进行计算。第二个长度为0,系统对String类的对象默认赋予长度0。

对于方法一的输入:getline(charr1,20)是istream类的一个类方法,第一个参数是目标长度,第二个是参数数组长度,getline()用此来避免超越数组长。

对于方法二的输入:getline(cin,str)中的getline不是类方法,而是一个函数,将cin作为参数,并没指出stri的长度,因为string的对象将根据输入的字符串自动调整它自己的大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值