本文主要是介绍模拟实现 Atoi,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
模拟实现 Atoi
分析思路:
首先先判断是否为空指针
接着我们来引入一个新的库函数isspace它是来解决前面有多少空格的问题,接着是处理正负号的问题,如果指针检测到前面有—,那么就令flg=-1,
我们又要引入一个新的库函数isdight 来判断前面是否有数字,
我们还定义了一个全局变量,叫state,是为了判断是否运算出现了问题
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
int state = 0;int MyAtoi(const char* str)
{assert(str != NULL);if (*str == '\0'){return 0;}//处理空格问题 while (isspace(*str)){str++;}//处理正负号的问题int flg = 1;if (*str == '-'){flg = -1;str++;}// + 没有+号是不加的 else if(*str == '+'){flg = 1;str++;}else{flg = 1;}//开始进行转换了long long ret = 0;//是因为如果要计算的数很大,int类型是完全不够的while (*str != '\0'){//isdigit 判断当前字符是否是数字字符 ‘1’ ‘2’ ‘3’ '4'if (isdigit(*str)){// 0 * 10 + ('1' - '0') * -1 -> -1// -1 * 10 + ('2' - '0') * -1 ->-12// -12 * 10 + ('3' - '0') * -1 -> -123ret = ret * 10 + (*str - '0') * flg;if (ret >= INT_MAX) {return INT_MAX;}if (ret <= INT_MIN){return INT_MIN;}}else{return (int)ret;}str++;}if (*str == '\0'){state = 1;}return (int)ret;
}int main()
{int ret = MyAtoi("123a456");//"-123a456"if (state == 1){printf("正常数字的转化: %d\n",ret);}else{printf("非正常数字的转化: %d\n", ret);}return 0;
}
这篇关于模拟实现 Atoi的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!