网站如何做营销,加盟平台响应网站建设,网站开发攻克时间,专业微网站电话号码文章目录 前言一、atoi()库函数的介绍及使用1.1 atoi()库函数介绍1.2 atoi()库函数使用 二、atoi()库函数的模拟实现2.1 函数设计2.2 函数实现思路2.3 具体实现2.4 测试 总结 前言
本篇文章介绍c语言中库函数atoi()的使用#xff0c;以及模拟实现库函数。 一、atoi()库函数的… 文章目录 前言一、atoi()库函数的介绍及使用1.1 atoi()库函数介绍1.2 atoi()库函数使用 二、atoi()库函数的模拟实现2.1 函数设计2.2 函数实现思路2.3 具体实现2.4 测试 总结 前言
本篇文章介绍c语言中库函数atoi()的使用以及模拟实现库函数。 一、atoi()库函数的介绍及使用
1.1 atoi()库函数介绍
以下是cplusplus网站关于atoi()库函数的介绍。atoi()库函数 说明 首先这个函数会将字符串前面的空格一一跳过直到遇到非空格字符这个非空字符分为以下情况 如果非空字符为字母则返回结果为0 比如abc123转换得到0如果非空字符为’-则会转换得到一个负整数且这个负整数没有超过int表示的范围正常返回这个数如果这个数超过了int型数据的表示范围则返回-2147483648 例如 “-12345”,转换得到整型数值-12345 -123456789123456转换得到-2147483648如果非空字符为‘’或者为数字字符则会转换得到一个正整数且这个正整数没有超过int表示的范围正常返回这个数如果这个数超过了int型数据的表示范围则返回2147483647 例如 12345转换得到整型数值12345 123456转换得到整型数值12345 123456789123456转换得到2147483647 如果str指向的是一个空字符串或者只包含空格则返回值为0. 如果两个数字字符之间存在其他非数字字符则转换非数字字符之前的数字字符。 “123ab112”只会转换得到整型数值123
1.2 atoi()库函数使用 负数转换 负数溢出转换 正数转换 正数溢出转换 包含非数字字符 1数字字符后面包含其他字符
2数字前面包含非数字字符
只包含非数字字符 二、atoi()库函数的模拟实现
2.1 函数设计
函数名:StrToInt
函数返回值类型: int
函数参数类型: const char* str
int StrToInt(const char* str);2.2 函数实现思路
函数指针的非空判断
//指针的非空判断 利用断言
assert(str);空字符串的判断
//如果第一个字符为\0则表示字符串为空串
if(\0 *str)
{return 0;
}跳过字符串前面的空格字符
//利用库函数提供isspace()函数判断
while(isspace(*str)) str;正数和负数的符合判断
int flag 1; //默认为正数
switch(*str)
{
case -: flag -1;
case : str;
}字符数字与整型数值的转换
//1.如果溢出判断使用long long
long long ret 0;
while(isdigit(*str)) //isdigit()函数为库函数
{ret 10*ret flag*(*str - 0);//溢出判断if(ret INT_MAX){return INT_MAX;}else if(ret INT_MIN){return INT_MIN;}str;
}
return (int)ret;//2. 如果溢出判断不使用long long
int ret 0;
while(isdigit(*str))
{int ConvertDigit *str - 0;if((ret INT_MAX/10) || ((INT_MAX/10 ret) (ConvertDigit 7))){return flag 0? INT_MAX:INT_MIN;}ret ret*10 ConvertDigit;
}
return flag 0 ? ret : -ret;2.3 具体实现
方法一使用long long
#includeassert.h
#includelimits.h
#includectype.h
//version 1.3
int StrToInt(const char* str)
{//1. 空指针判断assert(str);//2. 空字符串判断if (\0 *str){return 0;}//3. 去掉空格while (isspace(*str)) str;long long ret 0; //long long 用于判断转换结果是否超出int的表示范围int flag 1; //用于判断是否为负数默认为非负数//4. - 判断switch (*str){case -: flag -1;case : str;}//转换操作while (isdigit(*str)){ret ret * 10 flag * (*str - 0);//5. 溢出判断if (ret INT_MAX){return INT_MAX;}if (ret INT_MIN){return INT_MIN;}str;}return (int)ret;
}方法二不使用long long
#includeassert.h
#includelimits.h
#includectype.h// version: 1.4
// 溢出判断不使用long long
// 1. ConvertDigit *str - 0 -得到字符转换成的数字
// 2. ret ret*10 ConvertDigit -得到计算的结果默认为正数最后根据符号返回结果
// 3. (正数溢出判断) 上一次 ret INT_MAX/10
// 说明下一次计算的ret INT_MAX 则正数溢出
// (负数溢出判断) 上一次 ret INT_MAX/10 ConvertDigit 7
// 说明下一次相加 ret INT_MIN的绝对值 则负数溢出
// INT_MAX 2147483647 INT_MIN -2147483647-1
// 最后根据flag返回结果 flag 0 返回INT_MAX 否则返回INT_MIN
// 4. flag 0 直接返回 ret flag 0 返回-ret
int StrToInt(const char* str)
{//1. 空指针判断assert(str);//2. 空串判断if (\0 *str){return 0;}//3. 清除空格while (isspace(*str)) str;//4. 正负号判断int flag 1; //默认为正数switch (*str){case -: flag -1;case : str;}//5. 转换int ret 0;while (isdigit(*str)){int ConvertDigit *str - 0;//溢出判断if ((ret (INT_MAX / 10)) || (((INT_MAX/10) ret) (ConvertDigit 7))){return (flag 0) ? INT_MAX : INT_MIN;}ret ret * 10 ConvertDigit;str;}return flag 0 ? ret : -ret;
}2.4 测试 负数 负数溢出 正数 正数溢出 包含非数字字符 1数字字符后面包含非数字字符 2数字字符前面包含非数字字符 总结
本篇文章介绍了库函数atoi()的使用并使用不同的思路模拟实现atoi()。