FreedomLy's blog.

给出一个表达式,按照顺序求出表达式的值

字数统计: 737阅读时长: 3 min
2017/03/25 Share

按顺序求出表达式的值

今天碰到一个题目:
题目描述:

常规的表达式求值,我们都会根据计算的优先级来计算, 比如*/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法(心想:他们的世界是有多傻→_→),意味着表达式中没有/,只有(+,-*)。现给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少。

输入描述:

输入为一行字符串,即一个表达式。其中运算符只有+,-*。参与计算的数字只有0-9。
保证表达式是合法的,排列规则如样例所示。

输出描述

输出一个数,即表达式的值

输入例子

3+5*7

输出例子

56

刚开始觉得挺简单,就是字符串处理什么的,也没怎么在意,后来实现的时候才发现,原来还是有点麻烦的…

C++实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
* 输入字符串表达式,按照输入顺序求出表达式的结果
*/

#include<iostream>
#include<string>
#include<sstream>
#include<cmath>

using namespace std;

// 字符串转数字
int get_number(string num_str)
{
stringstream stream; // 声明stringstram变量
int result = 0;
int str_len = num_str.length();
stream << num_str;
stream >> result;
return result;
}

int main()
{
string s; // 保存输入的字符串
cout << "请输入要计算的表达式(不包含除):" << endl;
cin >> s;
int number[100] = { 0 }; // 保存数字的数组
string operator_str; // 保存操作符的字符串
int length = s.length();
string number_str; // 保存每个操作符之前的字符串
int index = 0; // 标记保存数字的数组的指针
for (int i = 0; i < length; i++)
{
if (s[i] >= '0' && s[i] <= '9') // 如果是数字,则存入 number_str
{
number_str += s[i];
}
else // 如果是操作符,存入operator_str
{
operator_str += s[i];
number[index] = get_number(number_str); // 得到两个操作符之间的操作数,并存入数组
index++;
number_str = ""; // 将字符串置为空,重新存入下一个操作数的字符串
}
if (i == length -1) // 得到表达式的最后一个操作数
{
number[index] = get_number(number_str);
index++;
}
}

int result = 0; // 计算结果
for (int i = 0; i < index; i++)
{
//todo 计算结果
if (i<1)
{
result += number[i];
}
else
{
switch (operator_str[i-1])
{
case '+':
result = result + number[i];
break;
case '-':
result = result - number[i];
break;
case '*':
result = result * number[i];
break;
default:
break;
}
}
//cout << number[i] << endl;
}
//for (int i = 0; i < operator_str.length(); i++)
//{
// cout << operator_str[i] << endl;
//}
//cout << "输入的字符串为:" << s << " 得到的数字为: " << number << endl;

cout << "Result = " << result << endl;

system("pause");
return 0;

}

挺简单的题目,居然写了这么多! _ (:3」∠) _
太久没写了,写的有点丑¬¬,看来还是要多练习 (ง •̀•́)ง

End~

CATALOG
  1. 1. 按顺序求出表达式的值
  2. 2. C++实现