首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C中将字符串转换为float(不含atof)

在C语言中,将字符串转换为float类型的方法有很多种,以下是一种常见的实现方式:

代码语言:c
复制
#include <stdio.h>

float strToFloat(const char* str) {
    float result = 0.0;
    float fraction = 0.1;
    int sign = 1;
    int decimal = 0;

    if (str == NULL)
        return 0.0;

    // 处理符号位
    if (*str == '-') {
        sign = -1;
        str++;
    } else if (*str == '+') {
        str++;
    }

    // 处理整数部分
    while (*str != '\0' && *str != '.' && *str != 'e' && *str != 'E') {
        if (*str >= '0' && *str <= '9') {
            result = result * 10 + (*str - '0');
        } else {
            // 非法字符,返回0.0
            return 0.0;
        }
        str++;
    }

    // 处理小数部分
    if (*str == '.') {
        str++;
        while (*str != '\0' && *str != 'e' && *str != 'E') {
            if (*str >= '0' && *str <= '9') {
                result = result + (*str - '0') * fraction;
                fraction *= 0.1;
                decimal = 1;
            } else {
                // 非法字符,返回0.0
                return 0.0;
            }
            str++;
        }
    }

    // 处理指数部分
    if (*str == 'e' || *str == 'E') {
        int exponent = 0;
        int expSign = 1;
        str++;

        // 处理指数符号
        if (*str == '-') {
            expSign = -1;
            str++;
        } else if (*str == '+') {
            str++;
        }

        // 处理指数值
        while (*str != '\0') {
            if (*str >= '0' && *str <= '9') {
                exponent = exponent * 10 + (*str - '0');
            } else {
                // 非法字符,返回0.0
                return 0.0;
            }
            str++;
        }

        // 根据指数值调整结果
        while (exponent > 0) {
            if (expSign == 1) {
                result *= 10;
                exponent--;
            } else {
                result *= 0.1;
                exponent--;
            }
        }
    }

    // 返回最终结果
    return result * sign;
}

int main() {
    const char* str = "3.14";
    float result = strToFloat(str);
    printf("转换结果: %f\n", result);
    return 0;
}

上述代码实现了一个简单的将字符串转换为float类型的函数strToFloat。它的实现思路是根据字符串的不同部分进行逐步解析和计算,最终得到转换后的float值。

该函数的使用示例在main函数中,将字符串"3.14"转换为float类型并打印出结果。

请注意,上述代码仅为示例,实际应用中可能需要考虑更多的边界情况和错误处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • C语言中把数字转换为字符串

    将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。...printf 和sprintf 都使用格式化字符串来指定串的格式,格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量...格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 大多数场合可以替代 itoa。 如: //把整数123 打印成一个字符串保存在s 中。...字符/Ascii 码对照 我们知道,C/C++语言中,char 也是一种普通的scalable 类型,除了字长之外,它与short, int,long 这些类型没有本质区别,只不过被大家习惯用来表示字符和字符串而已...strcat,但sprintf 能够一次连接多个字符串(自然也可以同时 它们中间插入别的内容,总之非常灵活)。

    16.8K72

    C语言中缀表达式计算器

    本文将介绍中缀表达式计算器的详细写法,是C语言把中缀表达式转换为后缀表达式和C语言逆波兰计算器的结合     但本篇用了更精简的写法,但是也相对的提高了代码的理解难度,阅读时,需自己详细斟酌 开始...80 void convert2postfix(char *src, char *dst); float cal(char *src); 中缀表达式转换为后缀表达式(操作符与操作数之间应有空格隔开...) 这里是另一种方式的中缀表达式后缀表达式,还有一种方式更容易理解一点,但是代码量相对更多,详情可见C语言把中缀表达式转换为后缀表达式 void convert2postfix(char *src,...float cal(char *src) { float stack[MAX_LEN]; float opd1, opd2; int top; char *p, *pre; top = -1...p; while ((*p >= '0' && *p <= '9') || *p == '.') { p++; } *p = '\0'; stack[++top] = atof

    1.2K10

    C++ 语言】类型转换 ( 转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast | 字符串转换 )

    int : 字符串变量转成整型变量 , 调用 C 函数 atoi(char*) 函数可以将字符串变量转成 int 类型变量 ; 2. char* float : 字符串变量转成浮点型变量 , 调用...atof(char*) 函数可以将字符串变量转成 float 类型变量 ; 3. int char* 变量 : ① 使用 itoa 函数 : 可以将 int 类型变量转为字符串 ; ② 使用 sprintf...int int_var = atoi("88888"); //将字符串转为浮点型变量 float float_var = atof("88.88f"); //打印转换结果 : 注意要输出...int 类型变量 int int_var = atoi("88888"); //将字符串转为浮点型变量 float float_var = atof("88.88f"); //打印转换结果...int 类型 转为字符串 char c[10]; itoa(888, c, 10); //打印转换后的字符串 cout << c << endl; char c1[10]; sprintf

    45130

    【原创】ObjectARX 多版本自适应字符集操作

    还有一点需要说明,Mircosoft将COM从16位换成32位时,规定了将需要字符串的方法只接受UNICODE字符串。...C运行时库是一致的,而ANSI规定运行时库必须支持UNICODE和ANSI(多字节)字符串和字符,所以WINDOWS运行时库也是支持多字节和宽字符编码操作的两套接口的。...定义后,我们关心的就是正确的给变量赋值了,在运行时库中,提供一个方法,当在某个字符串常量前加上大写L,则通知编译器,该字符串作为UNICODE字符串来编译,所以TCHAR.H中也利用了这一点,来定义了随环境变化的通知编译器字符编码的机制...      字符串连接 strlen _tcslen       求字符串长度  strcmp _tcscmp     字符串比较  atof _tcstod (注) 字符串换为double ...atoi _ttoi 字符串换为int  注:上表中 _tcstod 和 atof用法不同,不能直接替换。

    28020

    OpenCV4 C++学习 必备基础语法知识二

    微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 前言 之前我写过一篇介绍学习OpenCV C++一些前置基础C++11的基础知识,主要是介绍了输出打印、各种常见数据容器,这里又整理了一篇...C++" << std::endl; // 毫秒 std::chrono::milliseconds ms(3); std::cout << ms.count() << std::endl; // 转换为微秒...02 数值转换 OpenCV编程开发中,有时候会读取数据文件,需要把数据从字符(string)类型转为数值(number)类型,常见的有int、float、double、long等类型与string...atoi 转化为整数int类型 atof换为浮点数float类型 代码演示如下: // 各种字符与数值转换 double d = 1.234; float f = 3.145; int i = 314...f1 = std::atof(str1); float f2 = std::atof(str2); float f3 = f1 + f2; std::cout << f3 << std::endl;

    97140

    C语言中你可能不熟悉的头文件(stdlib.h)

    函数: 字符串转换 atof字符串(char[])转换为double类型数, 即(char) array-> float(函数) atoi 字符串换为整型(函数) atol 字符串换为...long类型(函数) atoll (c++11) 字符串换为长整型long long类型(函数) strtod 字符串换为double类型(函数) strtof (c++11) 字符串换为浮点类型...(函数) strtol 字符串换为long integer类型(函数) strtold (c++11) 字符串换为long double类型(函数) strtoll (c++11) 字符串换为...long long integer类型(函数) strtoul 字符串换为无符号long integer类型(函数) strtoull (c++11) 字符串换为无符号long long integer...27 size_t wcstombs(char str, const wchar_t *pwcs, size_t n)把数组 *pwcs 中存储的编码转换为多字节字符,并把它们存储字符串 str 中。

    1.5K20
    领券