栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++/笔试】传统OJ / ACM模式 读取输入总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++/笔试】传统OJ / ACM模式 读取输入总结

前言

  秋招第一次笔试,没怎么准备传统OJ(ACM模式)类型的题,逗号分隔+每排数量不一样的输入当场给我整麻了,吸取失败的经验教训,在此整理了ACM模式的输入读取处理。

1. 简单输入 1.1 空格间隔

输入几个变量的值,以空格隔开。
示例:
1 2

#include 
using namespace std;

int  main()
{
    int a,b;
    cin >> a >> b;
    //处理题目
    //cout << a <<" " << b << endl;
    return 0;
}
1.2 逗号间隔

输入几个变量的值,以逗号隔开。
//思路:用一个char型变量接收逗号。
示例:
1, 2, 3

#include
using namespace std;

int  main()
{
    int a, b, c;
    char s;
    cin >> a >> s >> b >> s >>c;
    //处理题目
    //cout << a <<" " << b << " " << c < 
2. n个输入 
2.1 空格隔开 

开始输入一个N,接下来输入N个数据,以空格隔开。
示例:
3
1 2 3

#include
#include
using namespace std;

int  main()
{
    int n;
    cin >> n;
    vector nums(n);
    for (int i = 0; i < n; ++i) 
    {
        cin >> nums[i];
    }    
    //处理题目
    
    return 0;
}
2.2 逗号隔开

开始输入一个N,接下来输入N个数据,以逗号隔开。
示例:
3
1,2,3

#include
#include
using namespace std;

int  main()
{
    int n;
    cin >> n;
    char s;
    vector nums(n);

    for (int i = 0; i < n - 1; ++i) {
        cin >> nums[i] >> s;
    }
    cin >> nums[n - 1];
    //处理题目
    
    return 0;
}
3. 不指定数量的一行输入

输入不指定数量的一行数据,以空格或逗号隔开。
//思路:不指定vector大小,逐个压入;通过cin.get()从缓存中读取一个字节,如果是换行符’n’就终止。
示例1:
1 3 5 7 9
示例2:
2,4,6,8

#include
#include
using namespace std;

int  main()
{
    vector nums;
    int num;
    int n=0;
    while (cin >> num) {
        nums.push_back(num);
        ++n;
        if (cin.get() == 'n') break; //cin.get()可换为getchar()
    }
    //处理题目
    
    return 0;
}
4. n行,每行m个输入 4.1 空格间隔

开始输入一个N,接下来输入N行数据,每行有M个数据(题目给定或也在第一行输入),以空格隔开。
示例:
3 3
1 2 3
4 5 6
7 8 9

#include
#include
using namespace std;

int  main()
{
    int n, m;
    cin >> n >> m;
    vector> nums(n,vector(m));

    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; ++j)
        {
            cin >> nums[i][j];
        }
    }
    //处理题目
    
    return 0;
}
4.2 逗号间隔

开始输入一个N,接下来输入N行数据,每行有M个数据(题目给定或也在第一行输入),以逗号隔开。
示例:
3,3
1,2,3
4,5,6
7,8,9

#include
#include
using namespace std;

int  main()
{
    int n, m;
    char s;
    cin >> n >> s >> m;
    vector> nums(n,vector(m));

    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m-1; ++j)
        {
            cin >> nums[i][j] >> s;
        }
        cin >> nums[i][m-1];
    }
    //处理题目
    
    return 0;
}
5. n行,每行不指定输入数量

开始输入一个N,接下来输入N行数据,每行不指定数据的数量,以空格或逗号隔开。
示例1:
3
1
1 2
1 2 3
示例2:
5
101,2
102,3
103,5
104,2,101,102
105,4,103

#include
#include
using namespace std;

int  main()
{
    int n,num;
    char s;
    cin >> n;
    vector> nums(n);

    for (int i = 0; i < n; ++i)
    {
        while (cin >> num)
        {
            nums[i].push_back(num);
            if (cin.get() == 'n') break;
        }
    }
    //处理题目
    
    return 0;
}
5.x 其他方法

仅限以逗号隔开的情况。

#include
#include
#include
#include
using namespace std;

string replaceToSpace(string& s) {
    int len = s.size();
    cout << "长度为:" << len << endl;
    // 统计空格数量
    for (int i = 0; i < len; i++)
    {
        if (s[i] == ',')
            s[i] = ' ';
    }
    return s;
}

int main()
{
    int n;
    cin >> n;
    vector> nums(n);

    //读取一行数据为string,将逗号替换为空格,使用istringstream自动分隔字符串再输入给临时变量(自动将类型转换为int),压入第二层vector
    for (int i = 0; i < n; ++i) {
        string s;
        cin >> s;
        replaceToSpace(s);
        istringstream is(s);
        int tmp;
        while (is >> tmp)
        {
            nums[i].push_back(tmp);
        }
    }

    //处理题目
    
    return 0;
}
参考

ACM模式各种输入总结C++版
ACM题目中输入数据的处理(C++版)

结语

  秋招加油鸭~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1030660.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号