📄 c_to_d.h
字号:
/************************************************************
字符向双精度实数转换程序模块
主调函数原型:
double c_to_d(char *str) //意思就是char 转换成 double型
使用方法:
把一个字符串作参数传给str,即可返回一个双精度型的数据
例如:将字符串"-13232.232"地址传给str,即可返回实数:-13232.232
written by 天涯浪子 08.5.11(母亲节)
************************************************************/
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define LEN 100
/***************************************************
void main() //程序编写过程中,本人用主函数来调试这
//个模块,依个人喜好,可以删掉
{
double c_to_d(char *); //声明实现转换的函数
char str[LEN];
gets(str);
printf("%f\n",c_to_d(str));
}
****************************************************/
double c_to_d(char *str) //实现转换的函数
{
void jianche(double *,char *,int *);//声明检测函数
int n;
double dNum;
for(n=0;*(str+n)!='\0';n++)
if(!((*(str+n)>='0' && *(str+n)<='9') \
|| (*(str+n)=='+') \
|| (*(str+n)=='-') \
|| (*(str+n)=='*') \
||(*(str+n)=='/') \
||(*(str+n)=='%') \
||(*(str+n)=='^') || \
(*(str+n)=='.')))
{printf("err [1]:from < double c_to_d(const char *str) > funcion ,data input error.contain illegal symbol!\n");exit(0);}
n = strlen(str);
jianche(&dNum,str,&n); //检测,分离整数部分与小数部分的函数
return dNum;
}
void jianche(double *pdNum,char *str,int *pn)
{
*pdNum = 0; //数据初始化;
void zuanhuan(double *pdNum,char *str,int *pn);//声明整数部分转换函数
void zuanhuan_(double *pdNum,char *str,int *pn);//声明小数部分转换函数
char str_1[50],str_2[50],flag_str='\0';
int i,n1=0,n2=0;
for(i=0;i<50;i++) {
*(str_1+i) = '\0';
*(str_2+i) = '\0';
}
if(*str =='.') //判断第一位是否为点
{
for(i=1;*(str+i);i++)
str_2[i-1] = str[i];
zuanhuan_(pdNum,str_2,pn);
}
else
{
if(*str =='-' ||*str =='+'){ //对第一位进行二次判断
flag_str = *str;
for(i=1;*(str+i);i++)
str[i-1] = str[i];
str[i-1] ='\0';
*pn=*pn-1;
}
for(i=0; *(str+i) !='.' && *(str+i)!='\0'; i++);
n1=i; //统计整数的位数,以确定实参
if(*pn == n1)
n2=0;
else
n2=*pn-n1-1; //统计小数的位数,以确定实参
/* printf("%d,%d\n",n1,n2); */ //编程检测行
for(i=0;i<n1;i++)
str_1[i] = str[i];
for(i=i;str[i];i++)
str_2[i-n1]=str[i+1];
/* printf("%s\n%s\n",str_1,str_2); */ //编程检测行,检测提取位的正确性
zuanhuan(pdNum,str_1,&n1);
zuanhuan_(pdNum,str_2,&n2);
if(flag_str=='-')
*pdNum=-*pdNum;
}
}
//整形数据转换函数
void zuanhuan(double *pdNum,char *str,int *pn)
{
int i;
for(i=*pn-1;i>=0;i--)
{
switch(*(str+i))
{
case '0': *pdNum = *pdNum + 0; break;
case '1': *pdNum = *pdNum + 1*pow(10,(*pn-i-1)); break;
case '2': *pdNum = *pdNum + 2*pow(10,(*pn-i-1)); break;
case '3': *pdNum = *pdNum + 3*pow(10,(*pn-i-1)); break;
case '4': *pdNum = *pdNum + 4*pow(10,(*pn-i-1)); break;
case '5': *pdNum = *pdNum + 5*pow(10,(*pn-i-1)); break;
case '6': *pdNum = *pdNum + 6*pow(10,(*pn-i-1)); break;
case '7': *pdNum = *pdNum + 7*pow(10,(*pn-i-1)); break;
case '8': *pdNum = *pdNum + 8*pow(10,(*pn-i-1)); break;
case '9': *pdNum = *pdNum + 9*pow(10,(*pn-i-1)); break;
}
}
}
//小数转换函数
void zuanhuan_(double *pdNum,char *str,int *pn)
{
int i;
for(i=0;*(str+i);i++)
switch(*(str+i))
{
case '0': *pdNum = *pdNum + 0 *(1/pow(10,i+1)); break;
case '1': *pdNum = *pdNum + 1 *(1/pow(10,i+1)); break;
case '2': *pdNum = *pdNum + 2 *(1/pow(10,i+1)); break;
case '3': *pdNum = *pdNum + 3 *(1/pow(10,i+1)); break;
case '4': *pdNum = *pdNum + 4 *(1/pow(10,i+1)); break;
case '5': *pdNum = *pdNum + 5 *(1/pow(10,i+1)); break;
case '6': *pdNum = *pdNum + 6 *(1/pow(10,i+1)); break;
case '7': *pdNum = *pdNum + 7 *(1/pow(10,i+1)); break;
case '8': *pdNum = *pdNum + 8 *(1/pow(10,i+1)); break;
case '9': *pdNum = *pdNum + 9 *(1/pow(10,i+1)); break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -