使用cin输入空格间隔的一串字符和数字

基础真的很重要

最近经历了一些笔试和面试,相当一大部分公司的笔试题都是力扣的原题或者变形。还有几家公司笔试题中出现了极为基础的C++知识,在笔试中遭遇挫折后,重新学习了cin,并在此记录。如有错误欢迎指正。

关于cin的理解

  1. C++程序将输入和输出看作字符流;对于输入来说,程序从输入流中抽取字符,对于输出来说,程序向输出流中插入字符;
  2. 输入流可以来自键盘、存储设备或者其他程序;输出流可以输出至显示器、打印机、存储设备或者其他程序。
  3. 流是程序与流源或流目的之间的中介,这样C++就可以对来源不同的字符做相同处理。
  4. 对于一个变量,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 
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 
#include 
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);

你可能感兴趣的:(c++,算法,开发语言,求职招聘)