atoi函數的實現

atoi函數要求

我所實現的atoi函數有以下幾個要求
1,這個函數需要丟棄之前的空白字符,直到找到第一個非空白字符。之後從這個字符開始,選取一個可選的正號或者符號後面跟隨儘可能多的數字,並將其解釋爲數字的值。

2,字符串可以在形成整數的字符後包括多餘的字符,將這些字符忽略,這些字符對於函數的行爲沒有影響。

3,如果字符串中的第一個非空白的字符不是有效的整數,或者沒有這樣的序列存在,字符串爲空或者只包含空白字符則不進行轉換。

4,如果不能執行有效的轉換,則返回 0。如果正確的值超過的可表示的範圍,則返回INT_MAX(2147483647)或 INT_MIN(-2147483648)。


小碼哥要開始碼代碼啦!!!

#include<stdio.h>

#define INT_MAX 2147483647
#define INT_MIN -2147483678
//兩個宏定義代表整型的邊界值

long long strtoi(char *str,bool minus); //該處爲strtoi函數的聲明,定義成longlong類型,是爲了判斷比整型邊界值更大和更小的值。

//該函數主要用於判斷非空格首字符,接收遍歷函數strtoi所傳回來的整型值
int my_atoi(const char *str)
{
    int num = 0;//num用來表示所轉換後的整數值
    if(str != NULL && *str != '\0')//等於NULL直接返回0
    {
        while(*str == ' ')//如果首字符是空格,那就接着向後遍歷,直到找到第一個非空格的字符
        {
            ++str;
            continue;
        }
        bool minus = false;//設置一個標誌,來判斷該數的正負
        if(*str == '+')
        {
            ++str;
        }
        else if(*str == '-')
        {
            ++str;
            minus = true;//true代表該數爲負數
        }
        if(*str != '\0')
        {
            num = strtoi(str,minus);
        }
    }   
    return num;
}

//strtoi函數時遍歷其餘所有的字符
long long strtoi(const char *str,bool minus)
{
    long long num = 0;
    while(*str != '\0')
    {
        if(*str >=0 && *str <= 9)//0-9爲合法數字
        {
            int flag = minus ? -1 : 1; //代表該值的正負
            num = num * 10 + flag * (*str - '0');//將字符轉換爲相應的數字
        if(!minus && num > 0x7FFFFFFF)//整型最大值2的31次方-1
        {
            return INT_MAX;
        } 
        else if(minus && num < (signed int)0x80000000)//整型最小值-2的31次方
        //由於整型默認爲無符號整型,所有比較負數大小時,要強轉爲有符號整型
        {
            return INT_MIN;
        }
        ++str;
        }
        else //遇到非法字符直接結束循環,返回當前的num
        {
            break;
        }
    }
    return num;
}
int main()
{
    char str[100] = {0};
    scanf("%s",str);
    int k = my_atoi(str);
    printf("%d\n",k);
    return 0;
}

測試用例

常規數值測試

上邊界值測試

下邊界值測試

異常值測試
測試用例還有很多,由於考慮到大家的觀賞性,小碼哥就舉了這四類,大家可以自己去多測幾組。


atoi函數的實現就到這裏,碼友們有什麼問題可以給小碼哥我留言,我會及時解決大家的問題。

碼完,收工啦。

發佈了23 篇原創文章 · 獲贊 18 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章