新乐市住房和城乡建设局网站,学平面设计需要准备什么东西,腾讯云买域名,模板wordpressatoi对于初学者来说大概率是一个陌生的函数 但不要害怕#xff0c;我们可以通过各种网站去查询 例如#xff1a; cplusplus就是一个很好的查询网站 目录 函数介绍模拟实现需要注意的点 函数介绍 我们发现这是一个将字符串转换为整形数字的函数
例如#xff1a;
int main()…atoi对于初学者来说大概率是一个陌生的函数 但不要害怕我们可以通过各种网站去查询 例如 cplusplus就是一个很好的查询网站 目录 函数介绍模拟实现需要注意的点 函数介绍 我们发现这是一个将字符串转换为整形数字的函数
例如
int main()
{char str[] 1234;int ret atoi(str);printf(%d\n, ret);return 0;
}在遇到不同字符串会有不同处理方法 该函数首先根据需要丢弃尽可能多的空白字符(如在isspace中)直到找到第一个非空白字符。 从这个字符开始接受一个可选的初始加号或减号后面跟着尽可能多的以10为基数的数字并将它们解释为数值。 字符串可以在组成整数的字符之后包含其他字符这些字符将被忽略并且对此函数的行为没有影响。 如果str中的第一个非空白字符序列不是有效的整数或者由于str为空或仅包含空白字符而不存在这样的序列则不执行转换并返回零。
模拟实现
模拟实现时我们就可以根据不同的处理方法进行操作 注意 因为当你输入一个“a”时输出为0 当输入一个“0”时同样为一个0 故需要进行判断是否为一个合法的或是非法的 可以运行enum进行判断 #includestdio.h
#includectype.h
#includeassert.h
#includestdlib.h
//atoi模拟
enum Judge
{VALID,INVALID
}judgeINVALID;int my_atoi(char* str)
{assert(str);//判断指针是否为NULLint len strlen(str);//判断是否为空字符串if (len 0){return 0;}//将空格跳过while (isspace(*str)){str;}//进行正负号的判断注意如果原字符串可能不带符号故初始化为1int flag 1;if (*str ){flag 1;//判断完正负号要进行跳到下一个字符str;}else if(*str -){flag -1;str;}long long ret 0;//注意溢出while (*str){if (isdigit(*str)){ret *str - 0 ret * 10;//计算新的ret的值的式子if (ret INT_MAX || ret INT_MIN)//判断是否超出int的最大范围{if (flag 1)return INT_MAX;elsereturn INT_MIN;}str;}elsereturn flag * ret;}//运行到这时肯定是合法的judge VALID;return flag * ret;
}需要注意的点 我经常性的写数组时忘记带[]导致程序出错 在进行判别正负号时为了省事没有进行-判断导致如果没有符号时程序出错 if (*str ){flag 1;str;}else{flag -1;str;}欢迎纠错与改正