输入一组数字型字符串,将其转换成double型的浮点数。
要求:不能使用系统函数atof,需要自己定义实现该函数。
输入多个数字型的字符串,每个字符串之间换行符隔开。字符串可能包括空格符、正负符号、小数点以及其它非数字字符。
对输入的字符串进行转换时,首先跳过行首的空格字符,直到遇上数字、小数点或正负符号才开始做转换,而再遇到其它非数字字符时或字符串结束时才结束转换,并将结果返回。
当输入字符’q’时,程序结束。
double型浮点数,显示小数点后六位。
当为正数时,浮点数第一位不显示’+‘。
当为负数时,浮点数第一位显示’-'.
在这里给出一组输入。例如:
6.348
-2.98
.525
q
在这里给出相应的输出。例如:
6.348000
-2.980000
0.525000
这道题不允许使用系统函数atof,则我们可以自己定义一个函数myatof。这个函数的实现的思路是将小数的首尾空格都去掉,再判断这个小数是正数还是负数,将小数点的前面和后面的数转换成整数,这样转换后的数就是不带小数点的数了,如6.348转化后为6348,在转化小数点后面的数时,将一个变量ans不断乘10,这样转换完后ans就是1000。最后将结果除以ans就是6,348了,最后按照是正数还是负数输出。注意再输入的时候,如果使用gets来输入字符串,在处理的时候要去除字符串前面的空格,因为gets输入会把空格一起输入数组。而如果用scanf输入的时候就不需要去除字符串前面的空格,因为scanf并不会把字符串前面的空格输入进数组。
#include
char x[20]; //存放数字型字符串
double myatof()
{
int flag=1,i=0;
int ans=1;
double sum=0;
while(!(x[i]>='0'&&x[i]<='9'||x[i]=='+'||x[i]=='-'||x[i]=='.')&&x[i]!='\0')
i++; //去除字符串前面的空格,如果使用scanf输入则不需要这一步
if(x[i]=='\0') //如果是空数组,返回 0
return 0;
if(x[i]=='-')
{ //如果有负号,则标记上
flag=-1;
i++;
}
if(x[i]=='+')
i++;
while(x[i]>='0'&&x[i]<='9')
{ //将小数点前的数变成整数
sum=sum*10+(x[i]-'0');
i++;
}
if(x[i]=='.')
{
i++;
while(x[i]>='0'&&x[i]<='9')
{ //将小数点后的数变成整数
sum=sum*10+(x[i]-'0');
i++;
ans*=10; //每次成10,最后用于除总和,变成小数
}
}
if(sum==0)
return 0;
return flag*sum/ans;
}
int main()
{
double num;
while(1)
{
gets(x); //用gets输入会输入字符串首的空格,scanf则不会
if(x[0]=='q')
break;
num=myatof(); //调用自定义的atof函数
printf("%lf\n",num);
}
return 0;
}
#include
#include //atof函数的头文件
int main()
{
char x[20];
double sum;
while(1)
{
scanf("%s",x);
if(x[0]=='q')
break;
sum=atof(x);
printf("%lf\n",sum);
}
return 0;
}