#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
double calculate(const char *src,int flag){
double num=0.0;
int n=0;
int count=0;
while (*src){
if((*src>='0')&&(*src<='9')){//判断输入是否为非数组字符
//num=num*10+atoi(src);或
num=num*10+(*src-'0');
src++;
if(n)count++;
}
else if(*src =='.')n=1,src++;
else {
num = 0;
break;
}
}
num=num/powl(10,count);
return flag * num;
}
double atof(const char *str){
double num = 0.0;
int flag = 1;
if(str!=NULL&&*str!='\0'){
while(*str==' ')str++;
if(*str=='+')str++;
else if(*str=='-')str++,flag = -1;
if(*str!='\0')num=calculate(str, flag);
}
return num;
}
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;
}
模拟atof函数
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
double calculate(const char *src,int flag) {
double num = 0.0;
int n = 0,count = 0;
while(*src){
if((*src>='0')&&(*src<='9')){//判断输入是否为非数组字符 ?
num=num*10+(*src-'0');
src++;
if(n)count++;
}
else if(*src=='.'){ n=1;src++; }
else{ num=0;break; }
}
num=num/powl(10,count);
return flag*num;
}
double str_to_int(const char *str) {
double num=0.0;
int flag=1;
if(str!=NULL&&*str!='\0'){
while (*str==' ')str++;
if (*str == '+')str++;
else if (*str == '-'){
str++;
flag = -1;
}
if (*str!='\0') num=calculate(str,flag);
}
return num;
}
int main() {
printf("%f\n", str_to_int(" +23.45"));
printf("%f\n", str_to_int(" -2.345"));
printf("%f\n", str_to_int("+234.5"));
printf("%f\n", str_to_int("-2345.44"));
printf("%f\n", str_to_int("2345"));
printf("%f\n", str_to_int("-1111.11"));
printf("%f\n", str_to_int(""));
printf("%f\n", str_to_int("123ab"));
return 0;
}
const char *p;的意思是p指向的目标空间的内容不可变化,char * const p;的意思是指针p的值不可变,但它指向目标的值可变。
1、char * const p : 定义一个指向字符的指针常数,即const指针,其实const 放在p前证明p是一个const,p是不允许改变的。
2、const char* p : 定义一个指向字符常数的指针,const 是c描述char的,char是const,所以指针可变。
3、char const* p : 等同于const char* p;const char **p是一个指向指针的指针,那个指针又指向一个字符串常量,char ** p也是一个指向指针的指针,那个指针又指向一个字符串变量。