C语言如何获取字符串中的数字,举例详细说明
时间: 2024-12-13 14:20:43 浏览: 6
在C语言中,获取字符串中的数字可以采用一些常见的方法,比如逐字符遍历、正则表达式库或者使用自定义函数。这里我将通过逐字符遍历的方式给出一个基本的例子:
```c
#include <stdio.h>
#include <ctype.h> // 包含处理字符类型的库
// 函数定义,用于从输入的字符串中提取数字
double extract_number(char *str) {
double number = 0.0;
int decimal_seen = 0; // 标记是否遇到小数点
char *endptr;
while (*str != '\0') { // 遍历到字符串结束
if (isdigit(*str)) { // 如果是数字字符
number = number * 10 + (*str - '0'); // 加上当前数值的十倍
} else if (*str == '.') { // 如果遇到小数点
if (!decimal_seen) { // 如果还没有见过小数点,则开始记录
decimal_seen = 1;
number += (*str - '0'); // 小数点本身也是数字
}
} else if (decimal_seen && isdigit(*str)) { // 遇到非数字字符,但之前有小数点
printf("Invalid input: non-digit after decimal point\n");
return number;
} else { // 非数字字符,且不是小数点,跳出循环
break;
}
str++; // 移动指针到下一个字符
}
// 检查是否有溢出情况
endptr = &number;
if (*str == '\0' || str[0] == '.' || !isspace(str[0])) { // 如果结束时不是空或后续还有非数字字符
printf("Invalid number format\n");
}
// 返回结果
return number;
}
int main() {
char str[] = "my number is 123.45";
double num = extract_number(str);
if (num >= 0) {
printf("Extracted number: %.2f\n", num); // 输出保留两位小数
}
return 0;
}
```
这个例子中,`extract_number`函数会尝试解析字符串中的连续数字部分,并忽略非数字字符。如果遇到小数点后有非数字字符或者解析过程中遇到非数字字符,它会打印错误信息并返回已有的数字部分。
阅读全文