校招知识点总结C++(一) 处理输入

对于没有明确给定输入输出的一律强烈谴责,why???

  • 对于一些算法题中,没有明确的输入输出。我们只能猜测是根据空行,还是文件终止符,这个太难了。

一、首先明确下c++怎么处理输入

首先是C语言中 pritf和scanf中函数。由于是c++,不做太多扩展。

然后是c++中的输入。本人建议熟练掌握两个就好,我就是掌握cin和string 的getline。

cin

  cin从缓冲区接收数据,直到遇到空格、TAB、回车停止,但需要明确的是这些空格、TAB、回车会仍停留在缓冲区中。

从这个程序中,我们可以验证这一点。而且继续思考,可以想出,cin会在开始时,碰到空格、回车和TAB会自动提取出,知道碰到非上面几个字符。

#include<iostream>
#include<string>
#include<vector>
#include <sstream>
using namespace std;
int main()
{
  string a;
  cin>>a;
  cout<<a<<endl;
    if(getchar() == '\n')
    {
        cout<<a.size()<<endl;

        cout<<" can not deal '\\n'"<<endl;
        //回车是否还在还在缓冲区中
    }
    if(getchar() ==' ')
    {
        cout<<a.size()<<endl;
        cout<<"can not deal ‘ ’"<<endl;
        //空格是否还在缓冲区中
    }      
}

getline

这是string中的getline,需要包含#include<string>。还有一个cin.getline(char *),这个需要用字符数组,我更愿意用string,所以没太在意这个,但应该差不多。

getline(cin,str,'\n')。有三个参数,第一个是cin,第二个是数组,第三个是终止符,默认是回车,也可以自己设定。

从上面的终止符中可以看出,并不是表面意思,一次取一行,可以更改终止符为‘,’ 这样遇到‘,’就会终止。

特性:getline 函数只对终止符敏感,遇到终止符就会停止,但会把终止符从缓冲区剔除。

这里有个区别:

  cin:遇到空格、回车、TAB就会停止,但这不是一开始,而是在读取到有效数据后,否则会一直过滤,把这些字符从缓冲区剔除,直到读取到有效数据。

  getline:则不一样,会提取终止符之前的数据,不管有没有指,所以可能提取到空值。这也是没有终止条件用来判断终止的一种情况。

从下面这个程序来测试。

  string a;
//    cin>>a;
    string b;
//    cin>>b;
    getline(cin,a);
    getline(cin,b);
    cout<<a<<b<<endl;

二、判断终止条件

  1.上面已经说过判断读取空值的一种情况。

  2.文件终止符,这个后续看补充,我用自己IDE模拟终止符出不去,就很尴尬。后续看下C++ primer的例子试下。

posted @ 2019-09-14 13:29  昔时  阅读(312)  评论(0编辑  收藏  举报