C++ Primer Plus学习——第四章

C++ Primer Plus学习——第四章

数组

数组是一种数据格式,能够存储多个同类型的值。
要创建数组,可使用声明语句。数组声明应指出以下三点:
1.存储在每个元素中的值的类型;
2.数组名;
3.数组中的元素数。
通用格式:

typeName arrayName[arraySize];

字符串

每次读取一行字符串输入

istream中的类(如cin)提供了一些面向行的类成员函数:getline()和get()。这两个函数都读取一行输入,直到到达换行符。然而,随后getline()将丢弃换行符,而get()将换行符保留在输入序列中。

1.面向行的输入:getline()

getline()成员函数在读取指定数目的字符或遇到换行符时停止读取。
例如,假设要使用getline()将姓名读入到一个包含20个元素的name数组中。可以使用这样的函数调用:

cin.getline(name,20);

getline()函数每次读取一行。它通过换行符来确定行尾,但不保存换行符。相反,在存储字符串时,它用空字符来代替换行符。

2.面向行的输入:get()

这种的工作方式与getline()类似,它们接受的参数相同,解释参数的方式也相同,并且都读到行尾。但get并不再读取并丢弃换行符,而是将其留在输入队列中。假设我们连续两次调用get():

cin.get(name,ArSize);
cin.get(dessert,Arsize);

由于第一次调用后,换行符将留在队列中,因此第二次调用时看到的第一个字符便是换行符。因此get()认为已到达行尾,而没有发现任何可读取的内容。如果不借助于帮助,get()将不能跨过该换行符。
幸运的是,get()有另一种变体。使用不带任何参数的cin.get()调用可读取下一个字符(即使是换行符),因此可以用它来处理换行符,为读取下一行输入做好准备。也就是说,可以采用下面的调用序列:

cin.get(name,ArSize);
cin.get();
cin.get(dessert,Arsize);

另一种使用get()的方式是将两个类成员函数拼接起来(合并),如下所示:

cin.get(name,ArSize).get();

之所以可以这样做,是由于cin.get(name,ArSize)返回一个cin对象,该对象随后将被用来调用get()函数。同样,下面的语句将把输入中连续的两行分别读入到数组name1和name2中,其效果与两次调用cin.getline()相同:

cin.getline(name1,ArSize).getline(name2,ArSize);
3.空行和其他问题

当getline()或get()读取空行时,最初的做法是,下一条输入语句将在前一条getline()或get()结束读取的位置开始读取;但当前的做法是,当get()(不是getline())读取空行后将设置失效位。这意味着接下来的输入将被阻断,但可以用下面的命令来恢复输入:

cin.clear();

另一个潜在的问题是,输入字符串可能比分配的空间长。如果输入行包含的字符数比指定的多,则getline()和get()将把余下的字符留在输入队列中,而getline()还会设置失效位,并关闭后面的输入。

string类简介

string对象和字符数组之间的主要区别是,可以将string对象声明为简单变量,而不是数组:

string str1;
string str2 = "panther";

类设计让程序能够自动处理string的大小。例如,str1的声明创建一个长度为0的string对象,但程序将输入读到str1中时,将自动调整str1的长度:

cin>>str1;

这使得与使用数组相比,使用string对象更方便,也更安全。从理论上说,可以将char数组视为一组用于存储一个字符串的char存储单元,而string类变量是一个表示字符串的实体。

赋值、拼接和附加

使用string类时,某些操作比使用数组时更简单。例如,不能将一个数组赋给另一个数组,但可以将一个string对象赋给另一个string对象:

char charr1[20];		//create an empty array
char charr2[20] = "jaguar";//create an initialized array
string str1;			//create an empty string object
string str2 = "panther";//create an initialized string
charr1 = charr2;		//INVALLD,no array assignment
str1 = str2;			//VALID,object assignment ok

string类简化了字符串合并操作。可以使用运算符+将两个string对象合并起来,还可以使用运算符+=将字符串附加到string对象的末尾。

string str3;
str3 = str1 + str2;
str1 += str2;

string类的其他操作

头文件cstring(以前为string.h)提供了这些函数。例如,可以使用函数strcpy()将字符串复制到字符数组中,使用函数strcat()将字符串附加到字符数组末尾:

strcpy(charr1,charr2);
strcat(charr1,charr2);

string类I/O

将一行输入读取到数组中的代码:

getline(cin,str);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值