首页
学习
活动
专区
工具
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类型并打印出结果。

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

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

相关·内容

  • 数制转换itoa atoi int转字符串 字符串转int string转int int转string

    C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 1.itoa():将整型值转换为字符串。 用法itoa(int,char*,int) 即(要转化的整形数,目标字符数组,进制) 2. ltoa():将长整型值转换为字符串。 用法ltoa(long,char*,int) 即(要转化的长整形数,目标字符数组,进制) ● gcvt():将浮点型数转换为字符串,取四舍五入。 用法gcvt(double,int,char*) 即(要转化的双精度浮点数,保留位数,目标字符串) ● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。 用法charecvt(double,int,int,int*) charecvt(双精度浮点数,保留位数,小数点位置,转换浮点数的符号) 这个函数存储最多ndigit个数字值作为一个字符串,并添加一个空数字符(’\0’),如果双精度浮点数中的数字个数超过保留位数,低位数字被舍入。如果少于保留位数个数字,该字符串用0填充浮点数符号0为正其余为负数。 ● fcvt():指定位数为转换精度,其余同ecvt()。 用法charfcvt(double,int,int*,int*) charfcvt(双精度浮点数,保留小数点后位数,小数点位置,转换浮点数的符号) 2. C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。 ● atof():将字符串转换为双精度浮点型值。 double atof=char(const char) ● atoi():将字符串转换为整型值。用法同上。 ● atol():将字符串转换为长整型值。用法同上。 ● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。double strtod(char * str,char * str) double strtod(转换的来源字符串首地址,不能转换数字的首地址) ● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。 strtol(char * str,char * str,int) double strtol(转换的来源字符串首地址,不能转换数字的首地址,基于进制) ● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。用法同上。

    01

    golang学习笔记5:字符串及相关函数

    字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。UTF-8 是被广泛使用的编码格式,是文本文件的标准编码,其它包括 XML 和 JSON 在内,也都使用该编码。由于该编码对占用字节长度的不定性,Go 中的字符串也可能根据需要占用 1 至 4 个字节,这与其它语言如 C++、Java 或者 Python 不同(Java 始终使用 2 个字节)。Go 这样做的好处是不仅减少了内存和硬盘空间占用,同时也不用像其它语言那样需要对使用 UTF-8 字符集的文本进行编码和解码。 字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容;更深入地讲,字符串是字节的定长数组。 Go 支持以下 2 种形式的字面值:

    03
    领券