• atof函数的实现


    atof函数的实现

    题目描述:

    输入一组数字型字符串,将其转换成double型的浮点数。

    要求:不能使用系统函数atof,需要自己定义实现该函数。

    输入格式:

    输入多个数字型的字符串,每个字符串之间换行符隔开。字符串可能包括空格符、正负符号、小数点以及其它非数字字符。
    对输入的字符串进行转换时,首先跳过行首的空格字符,直到遇上数字、小数点或正负符号才开始做转换,而再遇到其它非数字字符时或字符串结束时才结束转换,并将结果返回。
    当输入字符’q’时,程序结束。

    输出格式:

    double型浮点数,显示小数点后六位。
    当为正数时,浮点数第一位不显示’+‘。
    当为负数时,浮点数第一位显示’-'.

    输入样例:

    在这里给出一组输入。例如:

    6.348
    -2.98
    .525
    q
    
    • 1
    • 2
    • 3
    • 4

    输出样例:

    在这里给出相应的输出。例如:

    6.348000
    -2.980000
    0.525000
    
    • 1
    • 2
    • 3

    思路:

    这道题不允许使用系统函数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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    拓展(使用系统函数)

    #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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    python练习题(markdown中的60道题)
    基于SSH开发物流仓储调度系统 课程设计 大作业 毕业设计
    【线性代数基础进阶】二次型
    1027. 最长等差数列
    搭建C语言的环境
    【TensorRT】Win10系统python/c++安装tensorrt库
    Kafka的系统架构和API开发
    Radis基础命令(String类型)Value为JSON
    容器多机部署eureka及相关集群服务出现 Request execution failed with message: AuthScheme is null
    (八)CSharp-泛型类和参数约束(1)
  • 原文地址:https://blog.csdn.net/zhouhaoNB_/article/details/126757344