1.atof()的作用
atof()它可以将字符串换成浮点型数,会扫描参数字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时才结束转换,并将结果返回。
2.代码演示
2.1法一
题目描述:请编程实现递归算法,对前缀表达式求值。 简化约定:前缀表达式串中,操作数均为一位无符号整数,仅支持四则整数运算。 输入:+3*45 输出:23
#include <iostream>
#include <cstdlib>
using namespace std;
double exp()
{
char s[20];
cin>>s;
switch(s[0])
{
case '+': return exp()+exp();
case '-': return exp()-exp();
case '*': return exp()*exp();
case '/': return exp()/exp();
default: return atof(s);
break;
}
}
int main()
{
cout<<exp();
return 0;
}
输入:+ 3 * 4 5
输出:23
2.2法二
#include<iostream>
#include<cstring>
using namespace std;
char a[100];
int i;
int eval()
{
int x=0;
while (a[i]==' ')i++;
if (a[i] == '+')
{
i++;
return eval()+eval();
}
if (a[i] == '*')
{
i++;
return eval()*eval();
}
while ((a[i] >= '0')&&(a[i]<= '9'))
x = 10*x +a[i++]-'0';
return x;
}
int main()
{
gets(a);
cout<< eval()<<endl;
return 0;
}
2.3法三
#include <iostream>
#include <cstdlib>
using namespace std;
double Evalue(const string &a,int i=0)//输入的字符串a和其位移i
{
if(a[i]=='+')
return Evalue(a,i+1)+Evalue(a,i+2);//跳过此符号将式子的后两个数相加
else if(a[i]=='-')
return Evalue(a,i+1)-Evalue(a,i+2);//跳过此符号将式子的后两个数相减
else if(a[i]=='*')
return Evalue(a,i+1)*Evalue(a,i+2);//跳过此符号将式子的后两个数相乘
else if(a[i]=='/')
return Evalue(a,i+1)/Evalue(a,i+2);//跳过此符号将式子的后两个数相除
else
return a[i]-'0';//只剩数字,不用继续运算时,将字符a转换为数字结果
}
int main() {
string a;//字符串a
cin>>a;
cout<<Evalue(a);//输出计算后的结果
return 0;
}
#include <iostream>
#include <cstdlib>
using namespace std;
double Evalue(const string &a,int i=0)
{
switch(a[i])
{
case '+': return Evalue(a,i+1)+Evalue(a,i+2);
case '-': return Evalue(a,i+1)-Evalue(a,i+2);
case '*': return Evalue(a,i+1)*Evalue(a,i+2);
case '/': return Evalue(a,i+1)/Evalue(a,i+2);
default : return a[i]-'0';
}
}
int main() {
string a;
cin>>a;
cout<<Evalue(a);
return 0;
}
输入:+3*45
输出:23
法一二和法三的主要区别在于输入中是否包含空格
法三的两种方法分别用switch case和if else展示