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 调试,来模拟评测环境。