中国娱乐设计网站官网/时事政治2023最新热点事件
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=128
解题思路:
stringstream流的应用。
有几个函数需要特别说明一下:
unget()把读出的数据重新放入流中
atoi,arr to int,把字符串转换为int类型
atof,把字符串转换为double类型
string s;
s.c_str();把string类型转换为c风格的字符串。
方法一代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<algorithm>
using namespace std;int i;
string str;
double temp;double ac()
{++i;if(str[i] == ' ') ++i;if(str[i] >= '0' && str[i] <= '9'){string res;while(i != str.size() && str[i] != ' ')res += str[i++];sscanf(res.c_str(), "%lf", &temp);return temp;}if(str[i] == '+')return ac() + ac();if(str[i] == '-')return ac() - ac();if(str[i] == '*')return ac() * ac();if(str[i] == '/')return ac() / ac();
}int main()
{while(getline(cin, str)){i = -1;printf("%.2lf\n", ac());}return 0;
}
方法二代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<algorithm>
using namespace std;stringstream s;
string str;double ac()
{char ch;double temp;s>>ch; //从流中取出char类型数据if(ch == '+')return ac() + ac();if(ch == '-')return ac() - ac();if(ch == '*')return ac() * ac();if(ch == '/')return ac() / ac();s.unget(); //是数字则放回(不是char,需要放回)s>>temp; //从流中读出double类型数据return temp;
}int main()
{while(getline(cin, str)){s.clear();s<<str; //将string输入流printf("%.2lf\n", ac());}return 0;
}
方法三代码如下:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<algorithm>
using namespace std;stringstream s;
string str;double ac()
{string str;s>>str; //从流中取出字符串if(str[0] == '+')return ac() + ac();if(str[0] == '-')return ac() - ac();if(str[0] == '*')return ac() * ac();if(str[0] == '/')return ac() / ac();return atof(str.c_str()); //返回double类型数据,遇非数字字符停止
}int main()
{while(getline(cin, str)){s.clear();s<<str;printf("%.2lf\n", ac());}return 0;
}