C++输入函数的应用

最近因为找工作的事情,在刷一些编程题,也陆陆续续参加了一些笔试,一般编程中使用的语言是C++,因为编程题会有时间的限制,C++的效率最高,不容易出现超时的问题所以使用最多的语言就是C++。

在编程中,其中最容易遇到的问题就是输入问题。下面就讨论一下C++常用的一些输入函数。

概述

C++中几个输入函数有:

  • cin
  • cin.get()
  • cin.getline()
  • getline()
  • gets()
  • getchar()

cin

  • 输入数字,以“回车”或者空格结束

    1
    2
    3
    int a,b;
    cin>>a>>b; // 按行输入对应的参数
    cout<<a+b<<endl;
  • 输入一个字符串,遇“空格”、“TAB”、“回车”都结束

    1
    2
    3
    char a[20];
    cin>>a;
    cout<<a<<endl;

cin.get()

  • cin.get(str)可以用来接收字符,str为字符数组名。

    1
    2
    3
    char ch;
    ch=cin.get(); //或者cin.get(ch);只能获取一个字符
    cout<<ch<<endl;
  • cin.get(str,n)用来接收一行字符串,可以接收空格,str为字符数组名,n为接收字符数目。

    1
    2
    3
    char a[20];
    cin.get(a,20); //有些类似getline。可以输入多个单词,中间空格隔开。
    cout<<a<<endl;
  • cin.get()没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.

cin.getline()

  • 接受一个字符串,可以接收空格并输出

    1
    2
    3
    char m[20];
    cin.getline(m,5); //与上面基本相同。
    cout<<m<<endl;
1
2
3
4
5
输入:jkljkljkl
输出:jkljkljkl

输入:jklf fjlsjf fjsdklf
输出:jklf fjlsjf fjsdklf

getline()

  • 接受一个字符串,可以接收空格并输出,需包含#include<string>

    1
    2
    3
    string str;
    getline(cin,str);
    cout<<str<<endl;
1
2
3
4
5
输入:jkljkljkl //VC6中有个bug,需要输入两次回车。
输出:jkljkljkl

输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl

gets()

  • 接受一个字符串,可以接收空格并输出,需包含#include<string>

    1
    2
    3
    char m[20];
    gets(m); //不能写成m=gets();
    cout<<m<<endl;
1
2
3
4
5
输入:jkljkljkl
输出:jkljkljkl

输入:jkl jkl jkl
输出:jkl jkl jkl
1
2
3
4
5
6
7
8
9
10
11
// 多维输入
char m[3][20];
for(int i=0;i<3;i++)
{
cout<<"\n请输入第"<<i+1<<"个字符串:"<<endl;
gets(m[i]);
}

cout<<endl;
for(int j=0;j<3;j++)
cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;

getchar()

  • /接受一个字符,需包含#include<string>

    1
    2
    3
    char ch;
    ch=getchar(); //不能写成getchar(ch);
    cout<<ch<<endl;
1
2
3
4
输入:jkljkljkl
输出:j

//getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;

常用的应用

  • 输入单个数字

    1
    2
    int a;
    cin >> a;
  • 输入多个数字

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       // 默认是空格或者回车键为间隔
    int a, b;
    cin >> a >> b;


    // 以逗号隔开的多个数字输入
    int n, m;

    cin >> n;
    }

    if (cin.get() == ',') {
    cin >> m;
    }
  • 输入一维数组(默认以空格为间隔),#include <vector>

    1
    2
    3
    4
    5
       vector<int> arr(n, 0);

    for (int i = 0; i < m; i++){
    cin >> arr[i];
    }
  • 输入二维数组(默认以空格为间隔),#include <vector>

    1
    2
    3
    4
    5
    6
    7
       vector<vector<int>> arr(m, vector<int>(n, 0));

    for (int i = 0; i < m; i++){
    for (int j = 0; j < n; j++){
    cin >> arr[i][j];
    }
    }
  • ,为间隔的输入数组

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 二维数组,以逗号为间隔
    vector<vector<int>> S(n, vector<int>(m, 0));

    for (int i = 0; i < n; i++){
    cin >> S[i][0];
    for (int j = 1; j < m; j++){
    if (cin.get() == ',') {
    cin >> S[i][j];
    }
    }
    }
  • 输入不定长的数组(检测回车键)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       // 定义二维数组
    vector<vector<int>> F(n, vector<int>(n, -1));

    for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
    int temp;
    cin >> temp;
    F[i][j] = temp;
    if (cin.get() == '\n')
    break;
    }
    }
  • 输入字符串

    1
    2
    3
    4
       // 已知字符串的长度,注意最后一位是\0
    char a[21];
    cin >> a;
    cout << a << endl;

输入的时候需要加入越界检测如下,需要0<=n<=100

1
2
3
   if ((n < 0) || (n > 100)) {
return 0;
}

参考:C++中输入字符串的几种方法