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++中输入字符串的几种方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值