字符串转浮点数
来源:互联网 发布:windows查看隐藏文件 编辑:程序博客网 时间:2024/05/18 01:26
自己实现的字符串转换浮点数的代码
模电期中考试无聊写的- -
先记录一下, 以后有时间在优化。
精度之类的等等问题也暂时没有考虑
// =====================================================================================//// Filename: my_atoi.c//// Description: //// Version: 1.0// Created: 2014年11月14日 19时19分48秒// Revision: none// Compiler: g++//// Author: wangweihao (wangweihao), 578867817@qq.com// Company: none//// =====================================================================================/* * 实现字符转转浮点函数 * 浮点数可能有普通浮点数和科学计数法的浮点数 * 情况比较多 * 举个例子 * 3.14 0.314 314 3.14e10(等价于3.14e+10) 3.14e-10 */#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>double my_atoi(char *s){ int i, length, newlength; int flag = 0, flag2 = 0; //标记'.' , 和'e' int flagIndex = 0, flagIndex2 = 0; char symbol; double sum = 0; //计算最后的总和 double sum1 = 0, sum2 = 0, sum3 = 0; double ten1 = 1, ten2 = 0.1, ten3 = 1; length = strlen(s); for(i = 0; i < length; ++i) { if(isdigit(s[i])) ; else if(ispunct(s[i])) { if(s[i] == '.') { flagIndex = i; ++flag; } } else if(isalpha(s[i])) { if(s[i] == 'e') { ++flag2; flagIndex2 = i; } if(i < length) { symbol = s[i+1]; //存储符号 } } } if(flag > 1 || flag2 > 1) { printf("error input\n"); exit(-1); } //printf("flag = %d, flagIndex = %d, flag2 = %d, flagIndex2 = %d\nsymbol = %c\n", flag, flagIndex, flag2, flagIndex2, symbol); if(flag2 != 0) length = flagIndex2; if(flag == 0 && flag2 == 0) { for(i = length-1; i >= 0; --i) { sum += (s[i]-48)*ten1; ten1 *= 10; } return sum; } for(i = flagIndex-1; i >= 0; --i) { sum1 += (s[i]-48)*ten1; ten1 *= 10; } for(i = flagIndex+1; i < length; ++i) { sum2 += (s[i]-48)*ten2; ten2 /= 10; } length = strlen(s); for(i = length-1; isdigit(s[i]); --i) { sum3 += (s[i]-48)*ten3; ten3 *= 10; } if(flag2 != 0) { if(symbol == '-') { sum3 = -sum3; sum = (sum1 + sum2)* (pow(10, sum3)); return sum; } else sum = (sum1 + sum2)* (pow(10, sum3)); return sum; } sum = sum1 + sum2; return sum;}int main(int argc, char *argv[]){ char *p1 = "3.14"; char *p2 = "0.314"; char *p3 = "314"; char *p4 = "3.14e3"; char *p5 = "3.14e+3"; char *p6 = "3.14e-3"; char a[100]; printf("p1:%lf, p2:%lf, p3:%lf, p4:%lf, p5:%lf, p6:%lf\n", my_atoi(p1), my_atoi(p2), my_atoi(p3), my_atoi(p4), my_atoi(p5), my_atoi(p6)); scanf("%s", a); printf("my_atio(%s): %lf\n", a, my_atoi(a)); return 0;
0 0
- 字符串转浮点数
- 字符串转浮点数
- 字符串转浮点数
- python: 字符串转浮点数
- python 字符串转浮点数
- 字符串转浮点数 字符串转整型数
- C中浮点数转字符串
- double浮点数转字符串算法
- 整数(浮点数)转字符串
- C中浮点数转字符串
- 字符串转整数或浮点数
- 字符串转浮点数 str2float (python版本)
- python 浮点数字符串转int类型
- keil STM32 hex转浮点数及浮点数转字符串较好方案
- 浮点数转换为字符串
- 浮点数转换为字符串
- 浮点数转换为字符串
- ruby 格式化字符串 浮点数
- CRF(Conditional Random Field) 条件随机场
- MySQL的安装过程
- 《黑客与画家》读书笔记
- poj 2420 A Star not a Tree? 随机化变步长贪心
- 第12周项目3(3)-最大公约数
- 字符串转浮点数
- 数字签名简介
- 条件随机场(CRF)
- Spring字符集过滤器CharacterEncodingFilter
- linux学习之二十一---信号量
- CocoaPods第三方库管理利器
- 第12周项目3(4)-斐波那契数列
- 数字证书简介
- 【 题集 】 2008杭电集训队选拔赛 —— 热身赛