C语言------实现atoi函数

        首先介绍atoi函数的功能:该函数的作用是将参数字符串转换为一个整数。

(1)如果参数字符串以数字开头,则一直往后读,直到读到非数字字符或\0。然后将这些数字以整数形式返回。如:“62562hja”,返回整数62562。“1331”,返回整数1331。

(2)如果参数字符串以正负号开头,则往后读取,如果紧接着读到数字,此时与(1)相同。只是在返回整数时要加正负号。如果正负号后面不是数字字符,则返回0。如:“+4245sja”,返回4245。“-463hsda”,返回-463。“-gab”和“+hakjs”返回0。

(3)如果参数字符串以空格字符开头(\n,\r,\t,\f,\v),则跳过空格字符,再按照(1)和(2)进行判断。如:

“    425jhad”,返回425。

(4)如果不是以上的三种情况,则返回0。如“jajs4676”,“jsab”,均返回0。

        编写代码的思路就是按照上述几种情况来实现的:

//atoi函数的实现                                                                                                
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>

//参数为要转化的字符串
int myatoi(char arr[])
{
    if(arr == NULL)
    {
        //非法输入
        return -1;
    }   
    int index = 0;//记录数组下标
    int num = 0;//存放最终要返回的值
    int flag = 1;//设置符号标志位
        
    while(isspace(arr[index]))//是空格返回非零值(不一定是1),否则返回0
    {
        index++;//跳过空格字符,不只有空格,还有\n,\r,\f,\t,\v之类的字符
    }   
    if(arr[index] == '-')
    {
        flag = -1; //除空格外遇到的第一个数字是符号,标记为-1
    }   
    //注意:正负号不算作1
    if(arr[index] == '-' || arr[index] == '+')//如果遇到正负号,说明可以往后继续走
    {
        index++;
    }
    while(arr[index] >= '0' && arr[index] <= '9')//如果遇到的数字说明可以继续往下走
    {
        num = num*10 + arr[index] - '0';
        index++;
    }
    return flag*num;
}

猜你喜欢

转载自blog.csdn.net/sandmm112/article/details/80316264
今日推荐