安徽省建设干部网站,新品网络推广,企业网站开发上海韵茵,网络广告在我们学习c语言或者c时#xff0c;总会遇到一些我们熟悉的库函数#xff0c;这时候就需要我们通过cplusplus网站搜索学习#xff0c;下面就由我为大家演示一下如何通过这个网站的页面学习函数的使用方法吧#xff01;
atoi - C Reference (cplusplus.com)
我们今天要学习…在我们学习c语言或者c时总会遇到一些我们熟悉的库函数这时候就需要我们通过cplusplus网站搜索学习下面就由我为大家演示一下如何通过这个网站的页面学习函数的使用方法吧
atoi - C Reference (cplusplus.com)
我们今天要学习的是atoi库函数。
首先我们来看这个函数的参数和返回类型 函数的返回类型为int函数接收的参数类型为const char* 类型。
接着看下面这一大段文字 我们通过翻译我们可以了解到atoi 是一个标准的库函数它的全称是 ASCII to Integer用于将 ASCII 字符串转换成整数。
这个函数会解析 ptr 指向的字符串直到遇到无法转换为数字的字符为止然后将解析得到的数字返回。如果 ptr 无法被解析为有效的整数例如它是一个空字符串或者它不包含任何数字则函数返回 0。
再看看它的参数和返回值 C-string 以整数的表示形式开头。
成功后该函数将转换后的整数作为值返回。 如果转换后的值超出 的可表示值范围则会导致未定义的行为。
#include stdio.h
#include stdlib.h int main() { const char *str 12345; int num atoi(str); printf(The number is: %d\n, num); return 0;
}
在这个例子中字符串 12345 被转换为整数 12345然后打印出来。
然后我们可以通过一些案例具体研究一下这个函数的用法
通过输入1234字符串我们发现输出结果转换成了数字 接着我们在前面添上正负号试试 我们会发现这个函数会读取字符串前面的正负号。
那如果字符串前面有空格呢 正如你所见这个函数会把空格过滤掉。
那如果添加上一些字母呢还会不会被转换呢 并不会把字母打印出来。
那如果是在中间加上空格呢 这时后面的数字都消失了。
我们输入一个很大或者很小的数字时 会把这个很大或很小的数值转换为最大或最小的数字。
在传递空值时 接下来我们来模拟实现一个 atoi 函数。这个函数需要处理一些边界情况比如空指针、空字符串、跳过前导空格、正负号等。此外我们还需要处理可能的溢出情况。
对于跳过前导空格我们需要下面这样一个库函数 isdigit用来判断传入的是不是数字字符 下面我们来模拟实现以下这个函数
# define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestdlib.h
#includeassert.h
#includectype.h
enum State
{VAILD,INVAILD
}state INVAILD;
int MyAtoi(const char* str)
{assert(str ! NULL);if (*str \0){return 0;}while (isspace(*str))//isspace返回值不为0代表是空格{str;}//代码走到这里之后str遇到的一定不是空格有可能是正负号int flag 1;if (*str ){flag 1;str;}else if (*str -){flag -1;str;}long long ret 0;while (*str ! \0){if (isdigit(*str)){//是数字字符 把字符1变成数字1-把字符1减去0得到的就是数字1ret ret * 10 (*str - 0) * flag;}else{//不是数字字符return (int)ret;}str;//让指针继续往后走}//解决最大最小值问题if (ret INT_MAX){ret INT_MAX;}if (ret INT_MIN){ret INT_MIN;}//正常转换和非正常转换的区别在于一个走到斜杠0一个没有if (*str \0){state VAILD;}return (int)ret;
}
int main()
{int ret MyAtoi(123 );if (state VAILD){printf(合法转换%d\n, ret);}else{printf(不合法转换%d, ret);}return 0;
}