to_string函数还是getline导致全部RE?请大家斧正。

P1957 口算练习题

kdhimself @ 2021-03-10 11:45:03

自己注释比较详细,主要是运用了替换和拼接的操作。 to_string函数C++11之前的版本没有。 在VS2019上可以很好运行。

#include<iostream>
#include<string>
using namespace std;
int n;/*运算次数*/
int x, y, result;/*待运算的数和计算结果*/
char temp;/*存放运算符*/
string str[51], answer;
int main()
{
    cin >> n;
    int p = n;
    getchar();/*吸收回车*/
    while (n)/*因为是一次全输入,所以用string数组存储*/
    {
        getline(cin, str[p - n]);
        n--;/*整行输入*/
    }
    for (int i = 0; i < p; i++)
    {
        if (str[i][0] < 48 || str[i][0]>57)/*判断第一个字符是操作符号还是数字*/
        {
            temp = str[i][0]; /*获取操作*/                
            str[i].erase(str[i].begin(), str[i].begin() + 2);/*删除操作符和第一个空格,只剩一个空格,erase函数左闭右开*/
        }
        int k = str[i].find(" ");/*找到仅剩的空格的位置*/
        for (int j = 0; j <= k - 1; j++)/*提取第一个数到x*/
        {
            x = (str[i][j] - '0') + x * 10;
        }
        for (int j = k + 1; j <= str[i].size() - 1; j++)/*提取第二个数到y*/
        {
            y = (str[i][j] - '0') + y * 10;
        }
        switch (temp)/*把空格换为操作符,得运算结果*/
        {
        case 'a':str[i][k] = '+'; result = x + y; break;
        case 'b':str[i][k] = '-'; result = x - y; break;
        case 'c':str[i][k] = '*'; result = x * y; break;
        }
        x = 0, y = 0;/*清零*/
        answer = to_string(result);/*将数字强制转换为string*/
        str[i] = str[i] + "=";/*拼接等于号*/
        str[i] = str[i] + answer;/*拼接结果*/
        cout << str[i] << endl << str[i].size();/*输出*/
        if (i != p) cout << endl;
    }
}

by ud2_ @ 2021-03-10 12:48:02

@kdhimself 因为 Windows 有 '\r' 坑。建议换用 GNU/Linux。


by kdhimself @ 2021-03-10 13:17:11

@sjx233_ 老哥,我是win10,Linux双系统,刚听你的在Linux里用VScode运行了,还是能很好地运行。然后登录洛谷提交,依然不太行。这下我真不知道在getchar()这里怎么改动了。请您明示。


by ud2_ @ 2021-03-10 13:29:50

@kdhimself 双系统就好办了。

在 Windows 下编辑输入文件,复制到 Linux 调试,来模拟评测环境。


|