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);
linjiayina
发布了43 篇原创文章 · 获赞 1 · 访问量 1094
私信
关注