CSSC-PC更新了1个文件
This commit is contained in:
parent
3b8ee18299
commit
3a8856c3ea
104
代码/字符串.md
Normal file
104
代码/字符串.md
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
---
|
||||||
|
tags:
|
||||||
|
- 代码块
|
||||||
|
- 源码
|
||||||
|
- 字符串
|
||||||
|
- 转换
|
||||||
|
---
|
||||||
|
# 字符串转浮点
|
||||||
|
在C语言中,可以使用标准库函数 `atof()` 或者 `strtof()` 将ASCII字符串转换为浮点数。如果输入的字符串是形如 `-12.354` 的格式,可以直接通过这些函数进行转换。下面是两种方式的示例:
|
||||||
|
|
||||||
|
### 方法一:使用 `atof()`
|
||||||
|
```c
|
||||||
|
#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()` 更推荐,因为它允许你处理错误情况,并提供了更好的控制。
|
||||||
|
|
||||||
|
```c
|
||||||
|
#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. **将数值字符串转换为浮点数**。
|
||||||
|
|
||||||
|
### 示例代码:
|
||||||
|
```c
|
||||||
|
#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()` 返回的指针,确保后面的字符是 `';'`,表明数值部分成功提取并转换。
|
||||||
|
|
||||||
|
### 忽略异常
|
||||||
|
除非首字符非法,不然能够正常转换,故可忽略末尾的错误检查。
|
Loading…
Reference in New Issue
Block a user