C语言字符串到数值的转换方法
创作时间:
作者:
@小白创作中心
C语言字符串到数值的转换方法
引用
CSDN
1.
https://blog.csdn.net/Annaka918/article/details/143956749
在C语言编程过程中,在遇到转换字符串类型的项目时,本着能省事就省事的原则,这里分别提供了使用标准库函数和不使用标准库函数的方法来供大家选择。
首先,如果你要使用以下特定库函数,那么需要引用 <stdlib.h> 头文件。
1. atoi 函数
- 功能:将字符串转换为整数( int 类型)。
- 原型: int atoi(const char *str);
- 说明: atoi 函数会忽略字符串开头的空白字符,直到遇到非数字字符(包括空字符'\0')为止,然后将这些字符解释为一个整数并返回。如果字符串不以数字开头, atoi 返回0。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[] = "1234";
int num = atoi(str);
printf("The integer value is %d\n", num);
return 0;
}
2. atol 函数
- 功能:将字符串转换为长整型( long int 类型)。
- 原型: long int atol(const char *str);
- 说明:与 atoi 类似,但返回值是 long int 类型,可以处理更大范围的整数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[] = "1234567890";
long int num = atol(str);
printf("The long integer value is %ld\n", num);
return 0;
}
3. atof 函数
- 功能:将字符串转换为双精度浮点数( double 类型)。
- 原型: double atof(const char *str);
- 说明: atof 函数会扫描参数字符串,跳过前面的空白字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时才结束转换,并将结果返回。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[] = "123.45";
double num = atof(str);
printf("The double value is %f\n", num);
return 0;
}
4. strtol 函数
- 功能:将字符串转换为长整型( long int 类型),并允许指定数字的基数。
- 原型: long int strtol(const char *str, char **endptr, int base);
- 说明: strtol 函数可以指定数字的基数(如二进制、八进制或十六进制),并且可以通过 endptr 参数来获取未转换部分的指针。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[] = "1234";
char *end;
long int num = strtol(str, &end, 10);
printf("The long integer value is %ld\n", num);
return 0;
}
5. strtoul 函数
- 功能:将字符串转换为无符号长整型( unsigned long int 类型)。
- 原型: unsigned long int strtoul(const char *str, char **endptr, int base);
- 说明:与 strtol 类似,但返回值是无符号长整型,适用于转换无符号整数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[] = "1234";
char *end;
unsigned long int num = strtoul(str, &end, 10);
printf("The unsigned long integer value is %lu\n", num);
return 0;
}
6. strtod 函数
- 功能:将字符串转换为双精度浮点数( double 类型)。
- 原型: double strtod(const char *str, char **endptr);
- 说明: strtod 函数用于将字符串转换为 double 类型的浮点数,并且可以通过 endptr 参数来获取未转换部分的指针。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[] = "123.45";
char *end;
double num = strtod(str, &end);
printf("The double value is %f\n", num);
return 0;
}
7.不使用标准库(stdlib)函数
如果你觉得记忆上文中的标准库函数过于麻烦,也可以不使用标准库函数,手动完成转换。
代码解释:
- 函数
**stringToInt**
:这个函数接受一个字符串参数str
,并返回一个整数。 - 处理符号:首先检查字符串的第一个字符是否是
'-'
或'+'
,以确定数值的符号。 - 遍历字符串:从字符串的第一个有效数字字符开始,逐个字符转换为数值,并累加到结果中。这里通过
str[i] - '0'
将字符转换为对应的整数(例如,'1' - '0' = 1
)。 - 返回结果:根据之前确定的符号返回最终的结果。
#include <stdio.h>
// 函数声明
int stringToInt(const char *str);
int main()
{
const char *str = "1234";
int value = stringToInt(str);
printf("The integer value is: %d\n", value);
return 0;
}
// 将字符串转换为整数的函数
int stringToInt(const char *str)
{
int result = 0; // 存储最终的数值结果
int sign = 1; // 符号,1表示正数,-1表示负数
int i = 0; // 字符串的索引
// 处理可能的符号
if (str[0] == '-')
{
sign = -1;
i = 1;
}
else if (str[0] == '+')
{
i = 1; // '+'不影响数值,只是跳过它
}
// 遍历字符串,转换为数值
for (; str[i] != '\0'; i++)
{
if (str[i] < '0' || str[i] > '9')
{
break; // 遇到非数字字符,停止解析
}
result = result * 10 + (str[i] - '0'); // 将字符转换为对应的数值并累加
}
return sign * result; // 根据符号返回最终结果
}
热门推荐
微信小程序分包与预加载:提升用户体验的有效策略
“隔夜菜”到底能不能吃?30道菜450个数据揭开真相
如何把源码生成lib文件夹
楠竹耐寒吗 冬天会冻死吗
人体缺乏蛋白质,身体会出现什么症状?医生给出答案,不妨了解
投稿北大核心期刊:审稿2个月给录用通知,结果排队出刊要等1年半……心塞!
儿子18岁生日今年高考?这份祝福指南请收好
金鱼的四大分类:从草种到蛋种的形态特征与品种特点
强直性脊柱炎冬季护理指南:牢记5个关键点,科学防护远离疼痛,舒适过冬
缺硒之患:健康的潜在威胁
桐城至三亚皇后湾深度游:美食攻略与特色小吃推荐指南
用灭火器进行灭火的最佳位置是?灭火器的喷射口应对准
电子邮箱发信时,什么是抄送、密送和邮件合并?
国内9大桃花观赏胜地:最美的桃花林都在这里,你去过几个?
打造完美睡眠,从调整生理时钟开始!
如果遇到挑战,如何应对并克服?
网贷还完就上岸?不做这一步,征信永远恢复不了,99%的人都忽略
缅甸强震已致泰国曼谷10人遇难,上百人失联
中国云南救援医疗队赶赴缅甸震区!最新消息→
随机数:真随机数和伪随机数
往台风眼里扔颗氢弹,能让台风消失吗?
玻璃钢管道标准规范全解析
走进英国的象征——白金汉宫,历史、文化和现代生活的交汇
SLM金属3D打印步骤全解析
[Windows 11/10] 电脑无法从睡眠或休眠模式唤醒的解决方案
控制血糖常见的“十大误区”,你踩中了几个?
受花莲地震影响,大陆沿海多个铁路线临时封锁检查部分列车晚点
冬天的餐桌怎么能没有菠菜炖豆腐,做法简单,暖融融的,满足全家
郎咸平:一位备受争议的经济学家
电动商用车VS燃油车:扭矩功率转速全面比拼,差异竟如此之大!