ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ACM 数据读取

2022-08-16 13:33:35  阅读:149  来源: 互联网

标签:读取 int cin ACM Sample while Input 数据


C++ 中数据读取

C++ 输入过程中,是把输入加载到缓冲区中,然后对缓冲区中的字符进行读取。cincin.get()cin.getline()geline() 四个函数虽然都能进行数据读取,但是它们对缓冲区内数据的处理方法是不同的。下面会介绍它们之间的区别。

cin

结束条件:[enter] , [space] , [tab]

处理方法:cin 输入从非 [enter] ,[sapce], [tab]开始(丢弃),遇到 [enter] ,[space],[tab]表示当前输入结束。

cin.get()

用法: char a = cin.get()

处理方法:从当前位置读取一个字符,存入 a 中。

读取一行数组

/**
 * Sample Input
 * 1 3 5 7 9
 */

// C
while (scanf("%d", &a) == 1)
{
    /* code */
}

// C++
while (cin >> a)
{
    /* code */
}

每次读取两个数

/**
 * Sample Input
 * 1 3 5 7
 * Output
 * -2
 * -2
 */

int a, b;

// C
while(scanf("%d %d", &a, &b) == 2) printf("%d\n", a-b);

// C++
while(cin >> a >> b) cout << a-b << endl;

限定输入数量

/**
 * Sample Input
 * 2
 * 1 5
 * 10 20
 * Output:
 * 6
 * 30
*/

ios::sync_with_stdio(false); // 让 cout cin 比 scanf 和 printf 更快
int n, a, b;
cin >> n;
while(n--) {
    cin >> a >> b;
    cout << a - b << endl;
}

以特定输入为结束标志

例如:以 0 0 作为结束标志

/**
 * Sample Input
 * 1 5
 * 10 20
 * 0 0
 * Output:
 * 6
 * 30
 */

// C
int a, b;
while(scanf("%d %d", &a, &b) && (a !=0 && b != 0)) {
    printf("%d\n", a+b);
}

// C++
while(cin >> a >> b && (a != 0 && b != 0)) {
    cout << a + b << endl;
}

读取整行字符串

读取整行字符串不能使用 cincin 会忽略 空格、回车符、制表符 等。

// 使用字符串
string buf;
getline(cin, buf);

// 使用字符数组
char buff[255];
cin.getline(buff, 255);

以空格为分割的数组

/** 数组以空格分割
 * Sample Input
 * 1 2 3 4 5
 * 11 12 13 14 15
 * 21 22 23 24 25
 */

// 只知道有三行,每列未知
vector<vector<int>> res(3);

for(int i = 0; i < 3; i++) {
    int a;
    while(cin >> a) {
        res[i].push_back(a);
        if(cin.get() == '\n')
            break;
    }
}

数组以 ',' 分割

/**
 * 未知数组长度,用 ',' 隔开
 * Sample Input
 * 1,2,3,4,5,6,7
 * 0,2,3,4,5,7,3
 */

vector<int> w;
vector<int> v;

string s1, s2;
cin >> s1 >> s2;

string tmp;
stringstream ss;

ss << s1;

while (getline(ss, tmp, ','))
{
    w.push_back(stoi(tmp));
}

ss.clear();

ss << s2;
while (getline(ss, tmp, ','))
{
    v.push_back(stoi(tmp));
}

标签:读取,int,cin,ACM,Sample,while,Input,数据
来源: https://www.cnblogs.com/loganxu/p/16590909.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有