obsidian-notes/代码/字符串.md
2024-10-21 15:12:08 +08:00

3.2 KiB
Raw Blame History

tags
代码块
源码
字符串
转换

字符串转浮点

在C语言中可以使用标准库函数 atof() 或者 strtof() 将ASCII字符串转换为浮点数。如果输入的字符串是形如 -12.354 的格式,可以直接通过这些函数进行转换。下面是两种方式的示例:

方法一:使用 atof()

#include <stdio.h>
#include <stdlib.h>  // 包含 atof()

int main() {
    char str[] = "-12.354";
    float num;

    // 使用 atof() 函数将字符串转换为浮点数
    num = atof(str);

    printf("字符串 \"%s\" 转换为浮点数: %f\n", str, num);

    return 0;
}

方法二:使用 strtof()

strtof() 更推荐,因为它允许你处理错误情况,并提供了更好的控制。

#include <stdio.h>
#include <stdlib.h>  // 包含 strtof()

int main() {
    char str[] = "-12.354";
    char *end;
    float num;

    // 使用 strtof() 函数将字符串转换为浮点数
    num = strtof(str, &end);

    // 判断转换是否成功
    if (*end == '\0') {
        printf("字符串 \"%s\" 成功转换为浮点数: %f\n", str, num);
    } else {
        printf("转换失败,剩余未转换的字符: %s\n", end);
    }

    return 0;
}

解释:

  1. atof() 是一个简单的字符串到浮点数的转换函数,但是它没有错误检查机制。它直接将字符串转换为 float,如果字符串格式不正确,它的行为是未定义的。
  2. strtof() 提供了更灵活的错误处理方式,它会返回一个指针,指向输入字符串中第一个未处理的字符。通过检查这个指针,可以判断是否成功转换了整个字符串。

非法字符剔除

要将形如 "$P=-00.454 ;" 的字符串中的数值提取并转换为浮点数,首先需要对字符串进行解析,提取出数值部分,然后再使用 atof()strtof() 进行转换。

可以按照以下步骤操作:

  1. 忽略不需要的字符(如 $P=;),只提取数值部分 -00.454
  2. 将数值字符串转换为浮点数

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char str[] = "$P=-00.454 ;";
    char *start, *end;
    float num;

    // 查找等号后的字符位置
    start = strchr(str, '=');  // 找到 '=' 的位置
    if (start != NULL) {
        start++;  // 跳过 '='

        // 使用 strtof() 函数从字符串中提取浮点数
        num = strtof(start, &end);
        printf("提取的数值: %f\n", num);//忽略异常

        // 检查转换是否成功,并且确保后面是分号 ';'
        if (*end == ' ') {
            printf("提取的数值: %f\n", num);
        } else {
            printf("转换失败,剩余未转换的字符: %s\n", end);
        }
    } else {
        printf("没有找到等号。\n");
    }

    return 0;
}

代码解释:

  1. 使用 strchr() 查找等号 '=' 的位置,提取等号后面的字符串。
  2. 使用 strtof() 函数将等号后的数值部分(如 -00.454)转换为浮点数。
  3. 检查 strtof() 返回的指针,确保后面的字符是 ';',表明数值部分成功提取并转换。

忽略异常

除非首字符非法,不然能够正常转换,故可忽略末尾的错误检查。