其他分享
首页 > 其他分享> > ACM 数据读取

ACM 数据读取

作者:互联网

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