c++之复合类型笔记(一)
数组
数组是一种数据格式,能够存储多个同类型的值。
数组的初始化规则:
1)数组只有在定义的时候才能使用初始化。
2)初始化数组的时候,提供的值可以少于数组的元素数目。(其他元素会自动被设为0)
3)初始化下标从0开始
(注:求一个数组的长度。
eg:short things[]={1,2,3,4};
int num_elements=sizeof things/sizeof(short);)
字符串
字符串是存储在内存的连续字节中的一系列字符。
#代码2.1
#include<iostream>
#include<cstring>
int main()
{
using namespace std;
const int Size = 15;
char name1[Size];
char name2[Size] = "iDoit";
char food[Size];
cout << "你好,我的名字是" << name2;
cout << "!\n你的名字是?\n";
cin>> name1;
cout << "hellow," <<name1<<"。\n";
cout <<" 你最喜欢吃什么?" << endl;
cin >> food;
cout << "万万没想到,你竟然喜欢吃" << food << "\n\n\n"<<endl;
system("pause");
return 0;
}
当键盘输入姓名如“张三”,食物“辣椒”时(每个名词之间没有空格、制表符)。输出结果正确,如下所示
你好,我的名字是iDoit!
你的名字是?
张三
hellow,张三。
你最喜欢吃什么?
辣椒
万万没想到,你竟然喜欢吃辣椒
但当姓名中包含空格或制表符,如输入姓名:“San Zhang”时,便得到下面结果:
你好,我的名字是iDoit!
你的名字是?
San Zhang
hellow,San。
你最喜欢吃什么?
万万没想到,你竟然喜欢吃Zhang
对于c++的字符串输入:
cin使用空白(空格' '、制表符'\t'和换行符'\n')来确定字符串的结束位置。因此在读取一行字符串输入时,要将整条短语而不是一个单词作为字符串输入,需要采取另一种字符串读取方法,具体地说,需要采用面向行而不是面向单词的方法(这也就是产生上述情况的原因)。
istream中的类(如cin)提供了一些面向行的类成员函数:getline()和get()。这两个函数都读取一行输入,直到到达换行符。然而,getline()将丢弃换行符,而get()将换行符保留在输入序列中。
例如,假设要使用getline()将姓名读入到一个包含20个元素的name数组中,可以使用这样的函数调用:
cin.getline(name,20);
对于代码2.1修改为cin.getline(),其他代码不变,姓名输入:“San Zhang”,食物:“Pepper”得到的结果如下所示
你好,我的名字是iDoit!
你的名字是?
San Zhang
hellow,San Zhang。
你最喜欢吃什么?
Pepper
万万没想到,你竟然喜欢吃Pepper
面向行的输入:get()
istream类中有另外一个名为get()的成员函数,他有几种变体,其中一种与getline()相似,他们接受的参数相同,解释的参数方式也相同,并且都读取到行尾。但不同的是get()并不再读取并丢弃换行符,而是将其留在输入队列中。假设我们连续两次调用get():
cin.get(name1,Size);
cin.get(name2,Size);//会出现问题
由于第一次调用后,换行符将留在输入队列中,因此第二次调用的时候看到第一个字符便是换行符,因此get认为到达了行尾,而没有发现任何可读取的内容。如果不借助帮助,get()将不能跨过该换行符。但是get()还有另外一种变体,使用不带任何参数的cin.get()调用可读取下一个字符(即使是换行符),因此它可以用来处理换行符,魏都区下一行做准备。即
cin.get(name1,Size);
cin.get();
cin.get(name2,Size);//正常读取
(注:无参数的cin.get()仅仅读取一个字符并在输入流中删除所读字符,不做其他任何操作)
另外一种写法是
cin.get(name1,Size).get();
cin.get(name2,Size);//正常读取
之所以这样做,是由于cin.get(name1,Size)个返回来的是一个对象,该对象随后将被用来调用get()函数。
相关文章
- C++系列笔记(一)
- C++系列笔记(四)
- C++系列笔记(六)
- C++系列笔记(十一)
- EasyC++37,函数重载
- C++中this指针的作用以及用法详解
- “C++继任者”火到GitHub趋势榜一,C++之父却不认可!
- C++中this指针的理解和用法
- c++语言截取字符串,详解C++ string常用截取字符串方法
- C++ merge函数
- turtle(海龟作图),C++版「建议收藏」
- c++之编程模块笔记
- c++之数据处理笔记(二)
- Linus Torvalds:“C++ 真是一门很烂的语言!”
- C++复习笔记
- C++stl库_c++库
- C++统计字符频数_英文字符
- C/C++ 数据结构与算法笔记
- C/C++ 关于运算符重载笔记
- C++11新特性学习笔记
- C++ 数据结构和算法入门笔记
- C++项目贪吃蛇游戏笔记-项目分析
- C++11新特性学习笔记
- 【C++修炼之路】11. list类
- C++面向对象程序设计(谭浩强)第三章第五节学习笔记
- C/C++字节对齐
- C++ if语句嵌套使用方法详解
- C++智能指针unique_ptr详解
- C++Primer笔记之关联容器的使用详解
- c#调用c++方法介绍,windowapi
- 如何正确使用Nodejs的c++module链接到OpenSSL