这篇文章主要介绍“C语言中atoi函数模拟如何实现”,在日常操作中,相信很多人在C语言中atoi函数模拟如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中atoi函数模拟如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
int atoi ( const char * str );
功能:将字符串转换为整数。
解析C字符串str,将其内容解释为一个整数,该整数作为int值返回。
该函数首先丢弃尽可能多的空白字符,直到找到第一个非空白字符。然后,从这个字符开始,取一个可选的初始加号或减号,后面跟着尽可能多的数字,并将它们解释为一个数值。 例:" -123456" 转换为 -123456
字符串可以在构成整数的字符之后包含其他字符,这些字符将被忽略,并且对该函数的行为没有影响。例:" 123abc456" 转换为 123,虽然最终的输出结果是一个整数,但这属于非法转换
如果str中的第一个非空白字符序列不是有效的整数,或者由于str为空或只包含空白字符而不存在这样的序列,则不执行转换。例:“abc” " abc" “” 为非法转换,最终会输出整数0。
字符串 | 整数 | 合法性 |
---|---|---|
" 123456" | 123456 | 合法 |
“-123456” | -123456 | 合法 |
“123abc456” | 123 | 非法 |
“abc” | 0 | 非法 |
“” | 0 | 非法 |
“2222222222” | 任意值 | 非法 |
注:当转换的值超出int可表示值的范围时会发生什么,没有标准规范。
例:在VS2013编译环境下输出的数值
#include <stdio.h> #include <limits.h> #include <ctype.h> //通过枚举设置两种状态,分别代表字符串转换的合法性 enum Status { VALID, //合法 INVALID //非法 }; enum Status status = INVALID; //定义全局变量 status 为 INVALID,若转换合法,则将 status 变为 VALID,若非法则不变 int my_atoi(const char* str) { if (str == NULL) //字符串为空 { return 0; } if (*str == '\0') //空白字符 { return 0; } while (isspace(*str)) //字符串前面有多余的空格,则一直往后移寻找符号或数字 { str++; } int flag = 0; //flag 标志数字的正负 if (*str == '+') { flag = 1; str++; } else if (*str == '-') { flag = -1; str++; } long long ret = 0; while (isdigit(*str)) { ret = ret * 10 + flag*(*str - '0'); if (ret<INT_MIN || ret>INT_MAX) //判断转换后的数字是否越界 { return 0; } str++; } if (*str == '\0') //若字符串遍历完就走这一步,也就意味着该字符串的转换为合法的 { status = VALID; return (int)ret; } else //非法转换 { return (int)ret; } } int main() { //int ret = my_atoi("-123"); int ret = my_atoi(" -2222222222"); if (status == VALID) { printf("合法的转换:%d\n", ret); } else printf("转换不合法!返回值为:%d\n",ret); return 0; }
到此,关于“C语言中atoi函数模拟如何实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。