问题描述:通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明: 1. 操作数为正整数,不需要考虑计算结果溢出的情况。 2. 若输入算式格式错误,输出结果为“0”。
示例:
输入:“4 + 7”
输出:“11”
输入:“4 - 7”
输出:“-3”
输入:“9 ++ 7”
输出:“0” 注:格式错误
#include <iostream>
#include "string"
#include <sstream>
using namespace std;
//将string型数字转换成int型,并计算结果
void convert_str_to_int_and_computer(string *scr,string *dst)
{
int int_temp1 = 0;
int int_temp2 = 0;
int res = 0;
//1 运算的第一位
string str_temp1 = *scr;
stringstream ss_temp1;//利用stringstream将int数字转成成string
//2 运算符
string operator_flag = *(scr+1);
//3 运算的第二位
string str_temp2 = *(scr+2);
stringstream ss_temp2;
//4 结果
stringstream res_temp1;
//将string型数字转成int型
int_temp1 = atoi(str_temp1.c_str());
int_temp2 = atoi(str_temp2.c_str());
/*/利用原始方法将string型数字转成int型
for (int i = 0; i < str_temp1.length(); i++)
{
int_temp1 = int_temp1 + (int)(str_temp1[i]-'0')*pow(10,str_temp1.length()-i-1);
}
for (int j = 0; j < str_temp2.length(); j++)
{
int_temp2 = int_temp2 + (int)(str_temp2[j]-'0')*pow(10,str_temp2.length()-j-1);
}*/
ss_temp1<<int_temp1;
ss_temp1>>*(dst);
*(dst+1) = operator_flag;
ss_temp2<<int_temp2;
ss_temp2>>*(dst+2);
if (operator_flag == "+")
{
res = int_temp1 + int_temp2;
}else if (operator_flag == "-")
{
res = int_temp1 - int_temp2;
}else
{
res = 255;
}
res_temp1<<res;
res_temp1>>*(dst+3);
}
void main()
{
//存储输入数据
string str;
//存储去掉空格后的数据
string str_array[3];
//存储最终结果
string res_array[4];
getline(cin,str);
int str_array_index = 0;//str_array[]索引
for (int i = 0; i < str.length(); i++)
{
string temp = "";
int step = 0;
for (int j = 0; ' '!=str[i+j]&& (i+step)<str.length(); j++)
{
temp = temp+str[i+j];
step++;
}
if (""!=temp)
{
str_array[str_array_index] = temp;
str_array_index++;
}
i = i +step;//这一步很重要
}
//条用函数计算
convert_str_to_int_and_computer(str_array,res_array);
//输出结果
if ("255"!=res_array[3])
{
cout<<res_array[0]<<" "<<res_array[1]<<" "<<res_array[2]<<" = "<<res_array[3]<<endl;
}else
{
cout<<"运算符错误,请重新输入!"<<endl;
}
cin.get();
}