to_string函数还是getline导致全部RE?请大家斧正。
查看原帖
to_string函数还是getline导致全部RE?请大家斧正。
388475
kdhimself楼主2021/3/10 11:45

自己注释比较详细,主要是运用了替换和拼接的操作。 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;
	}
}
2021/3/10 11:45
加载中...