atoi
功能:转化字符串到整数
头文件: #include <stdlib.h>
int atoi (const char * str);
参数 str:要转换为整数的字符串
返回值
如果转换成功,函数将转换后的整数作为int值返回 , 如果没有执行有效的转换,则返回零。
注意事项
字符串只能转换数字,如字符串包含了数字以外的,则提前返回非数字前的字串
使用方法:
#include<stdio.h> #include<stdlib.h> int main() { char arr[] = "123"; int ret = atoi(arr); if (ret == 0) { printf("转换失败\n"); } else { printf("整型值值= %d\n整型值乘2= %d\n", ret, ret * 2); } system("pause"); return 0; }
最终输出结果为:
整型值 = 123
整型值乘2= 246
atoi模拟实现
注意事项:
- 判断atoi传过来的参数是否为空指针
- 判断首字符是否为空格,如有空格将跳过
- 判断字符串是否为空
- 判断字串正负
- 判断是否为数字,如是非数字提前返回非数字前的字串
- 考虑字串是否为溢出的问题 (大于int或小于int)
- 判断字串是否非法转换(用一个枚举来判断,起始把字符串判定为非法转换,如转换成功
在判定成 成功转换)
#include <ctype.h> #include<assert.h> #include<stdio.h> #include<stdlib.h> enum S { Value, ErrValue //代表非法转换 }; S = ErrValue; int my_atoi(char* arr) { //1:判断是否为空指针 assert(arr); //2:判断是否为空格 while (*arr == ' ') { arr++; } //判断字符串是否为空 if (*arr == '\0') return 0; //判断正负 flag 为1是正 -1是付 int flag = 1; if (*arr == '-') { flag = -1; arr++; } //首字符是否为数字 如果不是数字 就返回0 if (!isdigit(*arr)) return 0; //使用long long可以接受更长的长度 long long n = 0; while (*arr != '\0') { //判断是否为数字 //isdigit判断是否为十进制0-9的数字 头文件#include <ctype.h> if (isdigit(*arr)) { n = n * 10 + (*arr - '0'); //考虑是否为溢出的问题 if (n > INT_MAX) { n = INT_MAX; break; } else if (n < INT_MIN) { n = INT_MIN; break; } } //如果是非数字就退出并返回 else { return (int)n; } arr++; } //flag决定 N是否为正 n *= flag; //成功转换 if (*arr == '\0') { S = Value; //返回值是int类型所以强制类型转换一下 return (int)n; } //非法转换 return (int)n; } int main() { char arr[] = "123"; int ret = my_atoi(arr); if (S == Value) { printf("成功转换\n"); printf("整型值值= %d\n整型值乘2= %d\n", ret, ret * 2); } else { printf("非法转换\n"); printf("整型值值= %d\n整型值乘2= %d\n", ret, ret * 2); } system("pause"); return 0; }