基础真的很重要
最近经历了一些笔试和面试,相当一大部分公司的笔试题都是力扣的原题或者变形。还有几家公司笔试题中出现了极为基础的C++知识,在笔试中遭遇挫折后,重新学习了cin,并在此记录。如有错误欢迎指正。
关于cin的理解
- C++程序将输入和输出看作字符流;对于输入来说,程序从输入流中抽取字符,对于输出来说,程序向输出流中插入字符;
- 输入流可以来自键盘、存储设备或者其他程序;输出流可以输出至显示器、打印机、存储设备或者其他程序。
- 流是程序与流源或流目的之间的中介,这样C++就可以对来源不同的字符做相同处理。
- 对于一个变量,cin>>读取的是从非空白字符开始,到与目标类型不匹配的第一个字符之间的全部内容;不匹配的内容将被保存在输入缓冲流中,等待下一次输入。
关于此段的定义参考了该作者的文章,文章中还有更详细的说明,如需进一步查阅,请移步
文章链接
同时感谢该作者的知识分享
这么说内容很干,直接举例说明。
关于cin输入字母
每次读取一个字母
//例如输入ab
char letter;//只能读取第一个
cin>> letter;
cout<< letter <<endl;
//只能输出为a
如果要读取不包含空格、tab等字符的字符串,使用letter[20]
char letter[20];//自行设定一个char的长度
cin>> letter;//遇到空格、tab和换行自动结束
cout<< letter <<endl;
//可以输出ab
关于cin输入数字
数字会一直读取到空格等不符合规格的位置
//输入123 15
int num;
cin>> num;
cout << num << endl;
//输出123
数字和字母混合输入
假设第一位是字母,空格隔开,后面是数字,用字母减去数字。比如a-12。代码可以写做如下。
#include <iostream>
using namespace std;
int main(){
cout<<"空格间隔数字和字符"<<endl;
char letter;//只能读取第一个。若写作all[20]则遇到空格换行等结束
cin>> letter;
int num;
cin>> num;
char result = letter - num;
cout<< result << endl;
return 0;
}
//输入a 12
//输出U
通过空格间隔来拆分字符串并填充入数组
以上方法适用于已知空格数的。如果空格数未知呢。
字符串属于同一数据类型
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> re;
int a;
int i = 0;
cout<<"输入一串数字,每一个数字之间用字符隔开"<<endl;//使用getchar需要先读取一位,否则会吞掉第一位字符
cin>>a;
re.push_back(a);
cout<<re.size()<<endl;
while(getchar() != '\n')
{
cin>>a;
re.push_back(a);
}
for(int j = 0; j < re.size(); j++){
cout<<re[j]<<endl;
}
return 0;
}
做某公司面试题的时候,如上写不能通过,错误原因显示,getchar()未定义。
经尝试之后,加入了:
#include "stdio.h"
没有深究错误原因,仅作为记录和参考。
如果空格也要纳入输入
可以采用如下函数
string line;
getline(cin,line);
版权声明:本文为MFL_xiaotaiye原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。