三沙网站设计公司,汕尾手机网站设计,泰安网站建设招聘,茶企业网站文章目录 一. 什么是atoi函数二. 模拟实现函数atoi三. 总结atoi 一. 什么是atoi函数
atoi函数是将常量字符串转化为整数 int atoi(const char str);* 注意#xff1a;该函数的返回值为int#xff0c;所以不能超过int范围#xff0c;如果数字很大超过就会截断#xff0c;返… 文章目录 一. 什么是atoi函数二. 模拟实现函数atoi三. 总结atoi 一. 什么是atoi函数
atoi函数是将常量字符串转化为整数 int atoi(const char str);* 注意该函数的返回值为int所以不能超过int范围如果数字很大超过就会截断返回截断后的值即int的最大左右范围值。 举个例子
#include stdio.h
#include stdlib.h
int main()
{int ret1 atoi(-123);int ret2 atoi(11111111111111111111111);printf(%d\n, ret1);printf(%d\n, ret2);printf(%d\n, INT_MAX);
}结果表明超过int范围的值结果会截断截断后值和int最大值一样。
二. 模拟实现函数atoi
上面不理解没事看例子——》 例子一传一个空字符串 例子二:情况二、传一个空指针 例子三:传一个空格加整数的字符串 例子四传一个整数加字母的字符串 例子五传一个字母加整数字符串 例子6传一个负整数
#includestdio.h
#includestdlib.h
#includeassert.h
#includectype.hint main()
{printf(%d\n, atoi());printf(%d\n, atoi( 123));printf(%d\n, atoi(123sgsdg));printf(%d\n, atoi(adgd123));printf(%d\n, atoi(-123));return 0;
}例子一和四都是非法转换所以模拟实现要先处理这两种情况
#include stdio.h
#include ctype.h
#include limits.h
enum Status
{VALID,INVALID
};
enum Status status INVALID;
int my_atoi(const char* str)
{if (str NULL){return 0;}if (*str \0){return 0;}//空白字符while (isspace(*str)){str;}int flag 1;if (*str ){flag 1;str;}else if (*str -){flag -1;str;}//处理数字字符long long ret 0;while (isdigit(*str)){ret ret * 10 (*str - 0) * flag;if (retINT_MIN || retINT_MAX){return 0;}str;}if (*str \0){status VALID;return (int)ret;}else{return (int)ret;}
}
int main()
{int ret my_atoi(-123);if (status VALID)printf(合法转换%d\n, ret);elseprintf(非法转换%d\n, ret);return 0;
}三. 总结atoi 1、该函数首先会丢弃尽可能多的空白字符直到找到第一个非空白字符然后从这个字符开始取一个可选的初识加号或者减号后跟尽可能多的十进制数字并将他们返回一个int类型的数值。 2、若该字符串是在整数的字符后包含其他字符则这些字符将会被忽略返回其他字符之前的整数并且不会对该函数造成任何影响。 3、若该字符串中第一个非空字符序列表示有效的整数或是一个空指针或只包含空白字符则不执行任何转换并且返回零。 小弟制作不易劳烦各位兄弟点点小小的关注谢谢了