关于数据读入的问题

lalala 2021-05-15 16:06:37

比赛时考虑读入T后cin不读入'\n',需要额外的getline;又考虑getline不会将'\n'读入string,所以加了对读入串size的判断。 先上WA代码。这份代码在本地使用OJ测试数据对拍,可以得到正确结果。

#include <bits/stdc++.h>
using namespace std;
#define sz(x) x.size()
int T;
string s, t, r;

int main()
{
    cin >> T;
    while (T--)
    {
        s = "", t = "", r = "";
        for (; !sz(s); getline(cin, s))
            ;
        for (auto c : s)
        {
            if (c != ' ')
                t += c;
            else
                r = t + ' ' + r, t = "";
        }
        r = t + ' ' + r;
        cout << r << endl;
    }
    return 0;
}

如下是AC代码,其实只修改了数据读入部分。

#include <bits/stdc++.h>
using namespace std;
#define sz(x) x.size()
int T;
string s, t, r;

int main()
{
    cin >> T;
    getline(cin, s);
    while (T--)
    {
        t = "", r = "";
        getline(cin, s);
        for (auto c : s)
        {
            if (c != ' ')
                t += c;
            else
                r = t + ' ' + r, t = "";
        }
        r = t + ' ' + r;
        cout << r << endl;
    }
    return 0;
}

想请教一下为什么会出现上述情况?

共 1 条回复

admin

这题的命题人和你应该都是用 Windows 生成数据/测试的。

这导致文件中实际的 \r\n 被看作 \n 处理。

评测使用 Linux 则不会做此处理。