首页 > 编程知识 正文

c++atoi函数怎么用,c语言atoi函数源代码

时间:2023-05-03 16:13:22 阅读:221176 作者:2102

什么是atoi函数?

把字符串转换成整型数的一个函数。

那现在我们来实现如何构造出这个函数

1.首先创建出主函数和自定义函数 int main(){ char ch[] ="1234"; return 0;}

我们如何去实现将字符串1234转换成整形呢?

我们这里引入了一个my_atoi的自定义函数。

并且为了对于ch数组和数组指针加上const使代码更为健壮。

​​​​int my_atoi(const char* s){ }int main(){const char* p = "1234";int ret = my_atoi(p); return 0;}​​​​ 2. 那接下来我们要在my_atoi函数中写什么呢? 2.1 我们要进行对传入来的字符串的判断。

(1)是否传来的字符串为空字符串?

(2)是否传来的为空指针?

(3)传来的字符串是否只有数字字符?

(4)对于转换数字的正负判断

对于这类问题我们要一一讨论

因此我们的my_atoi函数可以添加如下内容

int my_atoi(const char* s){int flag;//assert(s != NULL);if (s == NULL)return 0;if (*s == '')return 0;//跳过空白字符while (isspace(*s))//是空白字符返回非0值 非空白字符不进入{s++;}//处理+-if (*s == '+'){flag = 1;s++;}else if (*s == '-'){flag = -1;s++;}}

2.2 那我们是如何判断接下来的字符都是数字字符呢?

我们引入了一个新的函数 - isdigit,通过此函数可以判断是否为数字字符,那接下来我们就要进行如何将一个数字字符转换称一个十进制数字。

那写到了这里我们已经斩断了几乎所有的困难,那接下来我们需要写出我们的主要步骤 - 把字符串转换成数字。

2.3 如何把数字字符转换称数字

首先我们可以通过观看ASCII表可以看出字符1-9与数字1-9的关系

可以得知当'9'-'0'=9、'8'-'0'=8,可以推出数字字符等于数字加上'0'的ASCII。

因此我们的代码可以如下图所示

while (isdigit(*s)){n = n * 10 + (*s - '0') * flag;if (n > INT_MAX || n < INT_MIN){return 0;}s++;}

我们的基本代码就写出来了,但如果考虑数字字符以后有着其他字符呢?

我们可以引入一个全局变量来定义是否合法转化

enum state{INVALID, //0VALID //1};enum state STATE = INVALID;//记录是合法访问的值还是非法访问的值

然后对数字字符后位进行判断

//非数字字符或    if (*s == '')    {        STATE = VALID;        return n;    }    else//非数字字符    {        STATE = INVALID;        return n;    }                        }

通过对后位的判断来决定是否为合法转化。

最后请看整理出的代码:

​enum state{INVALID, //0VALID //1};enum state STATE = INVALID;//记录是合法访问的值还是非法访问的值int my_atoi(const char* s){int flag;//assert(s != NULL);if (s == NULL)return 0;if (*s == '')return 0;//跳过空白字符while (isspace(*s))//是空白字符返回非0值 非空白字符不进入{s++;}//处理+-if (*s == '+'){flag = 1;s++;}else if (*s == '-'){flag = -1;s++;}//处理数字字符的转换long long n = 0;while (isdigit(*s)){n = n * 10 + (*s - '0') * flag;if (n > INT_MAX || n < INT_MIN){return 0;}s++;}//非数字字符或if (*s == ''){STATE = VALID;return intn;}else//非数字字符{STATE = INVALID;return intn;} }#include<string.h>int main(){const char* p = "1234";int ret = my_atoi(p);if (STATE == VALID)printf("合法的转换:%d", ret);elseprintf("非法的转换:%d", ret);return 0;}​

谢谢观看!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。