栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

四则运算表达式求值

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

四则运算表达式求值

4132:四则运算表达式求值

4132:四则运算表达式求值

#include 
using namespace std; 
//因子乘除得到项,项加减得到表达式,
//因子中可能为数字,可能为(数字相加减,一个小表达式)
double expressionValue();
double favorValue(){
	double result=0.0;
	char ch=cin.peek();	
	if(ch=='('){
		cin.get();
		 result=expressionValue();
		 cin.get(); 
	}	
	else{
//		while(isdigit(ch)){//1234 isdigit检查所传的字符是否是十进制数字字符(char类型
//			result=10*result+ch-'0';// 1 10+2 120+3 1230
//			cin.get();
//			ch=cin.peek();
	int count=0;//小数点后面有多少位 
	int flag=0;//flag为1则开始小数点后的计数 
		while(true){//1234 isdigit检查所传的字符是否是十进制数字字符(char类型
		if(isdigit(ch)){
			result=10*result+ch-'0';// 1 10+2 120+3 1230
			if(flag)count++; 
		}
	else if(ch=='.'){
		flag=1;
//		count++;
//		cin.get();//跳过小数点 
	}
	else break;
			cin.get();
			ch=cin.peek();
		}
		while(count--)result*=0.1; 
//		return result; !!!!!!!!!!!!!!Atention!
	}
	return result;
}


double termValue(){
	double result=favorValue();//读前面那个因子
	while(true){
			char ch=cin.peek();
			if(ch=='*'||ch=='/'){
				cin.get();
				double value=favorValue();//读后面那个 
				if(ch=='*')result*=value;
				else result/=value; 
			}
			else break;
//因子乘除得项,项加减得表达式,若无乘除说明项只有一个因子,要是还能遇到乘除值则继续 
	} 
	return result; 
}
double expressionValue(){
	double result=termValue();
		while(true){
			char ch=cin.peek();
			if(ch=='+'||ch=='-'){
				cin.get();
				double value=termValue();//读后面那个 
				if(ch=='+')result+=value;
				else result-=value; 
			}
			else break;
	} 
	return result; 
}
int main(){

		cout<>ch;
//ch=cin.peek();
//		while(isdigit(ch)){//1234 isdigit检查所传的字符是否是十进制数字字符(char类型
				cin.get();
//			result=10*result+ch-'0';// 1 10+2 120+3 1230
//		cin.get();
//			ch=cin.peek();
//		}
//		cout< 

一开始能通过给出的测试数据却WA了,经过检查是求因子的值的函数double favorValue()中,返回返回值的语句不恰当,如果细心的话会节省很多时间。不过也因此,重复熟悉对因子的值的获取,总结出两种通过字符串读得整数、浮点数的方法

#include 
using namespace std;
int main(int argc, char** argv) {
	char ch=cin.peek();
	double result=0;
	int flag=0;
	int count=0;
	while(true){
			if(isdigit(ch)){
			result=10*result+ch-'0';// 1 10+2 120+3 1230
			if(flag)count++; 
		}
	else if(ch=='.'){
		flag=1;
//		count++;
//		cin.get();//跳过小数点 
	}
	else break;
			cin.get();
			ch=cin.peek();
		}
	while(count--)result*=0.1; 
	cout< 
#include 
using namespace std;
int main(int argc, char** argv) {
//	char str;cin< 

要记得cin.get(),cin.peek()的用处,它们本身就都有cin的功能,而且都有返回值 。
要从一个字符串读到一个整数的值(本题是求浮点数噢,但思想一致),在该字符串中从前往后 地读,或者说是边从键盘输入,同时读取值,

int result=0;
char ch=cin.peek();
while(isdigit(ch)){
	result=result*10+ch-'0';
	cin.get();
	ch=cin.peek();
}
**result=result*10+ch-'0';**

这一句真的很厉害。
1234 1 10+2 120+3……

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312017.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号