前言
本篇将介绍atoi函数的使用,通过实例讲解函数的使用方法,模拟实现atoi函数。
atoi函数的头文件
#include<stdlib.h>
声明
int atoi(const char *str)
功能
C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
注意:转化时跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(’/0’)才结束转换,并将结果返回。如果第一个字符不是数字,直接返回0;
返回值
该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。
实例
#include<stdio.h> #include<stdlib.h> int main() { char str1[] = "123wfwc"; char str2[] = "wd322sdc"; char str3[] = "SC23 34"; char str4[] = " -123 232"; int a, b, c, d; a = atoi(str1); b = atoi(str2); c = atoi(str3); d = atoi(str4); printf("%d %d %d %d", a, b, c, d); return 0; }
运行结果
123 0 0 -123
模拟实现atoi函数
要解决以下问题:
1.空指针问题
2.字符前有空格问题
3.遇到'+','-'号是返回值的正负问题
4.返回值过大溢出问题
#include<stdio.h> #include<assert.h> #include<limits.h>//INT_MAX,INT_MIN的头文件 #include<ctype.h>//isdigit函数头文件 //int isdigit(int c);如果 c 是一个数字,则该函数返回非零值,否则返回 0。 int my_atoi(const char* str) { assert(str); //字符串长度为0 if (*str == '\0') { return 0; } char* ret = str; int flag = 1; long long n = 0; //字符串前有空格 while (*str == ' ') { str++; } //字符串前的+,-号 if (*str == '+') { flag = 1; str++; } if (*str == '-') { flag = -1; str++; } while (*str != '\0') { if (isdigit(*str))//判断指向的字符是否是数字 { n = n * 10 + (*str - '0') * flag; //解决返回值过大溢出 if (n > INT_MAX) { n = INT_MAX; break; } else if (n < INT_MIN) { n = INT_MIN; break; } } else { break; } str++; } return (int)n; } int main() { char str1[] = "123wfwc"; char str2[] = "wd322sdc"; char str3[] = "SC23 34"; char str4[] = " -123 232"; int a, b, c, d; a = my_atoi(str1); b = my_atoi(str2); c = my_atoi(str3); d = my_atoi(str4); printf("%d %d %d %d", a, b, c, d); return 0; }
总结
创作不易,如果对你有所帮助,请点个赞!!!如有疑惑,不同见解,欢迎评论区留言!