4132:四则运算表达式求值
#includeusing 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()中,返回返回值的语句不恰当,如果细心的话会节省很多时间。不过也因此,重复熟悉对因子的值的获取,总结出两种通过字符串读得整数、浮点数的方法
#includeusing 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< #includeusing 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……



