天天看點

atoi函數詳細分析

atoi函數:将字元串轉換為相應的整型數。

isspace函數:檢查是否為空格,跳格符(制表符或換行符),是則傳回1,否則傳回0。

isdigit函數:檢查是否為數字(0~9)。是則傳回1,否則傳回0。

注意:字元串中間無空格,符号在最前方。

#include <ctype.h>

int atoi(char s[])
{
    int i, n, sign;
    for (i = 0;isspace(s[i]);i++)
        ;
    sign = (s[i] == '-') ? -1 : 1;
    if (s[i] == '+' || s[i] == '-')
        i++;
    for (n = 0; isdigit(s[i]);i++)
        n = 10 * n + (s[i] - '0');
    return sign * n;
}
           

atoi函數運作過程:

假設一個字元串為s[7] = -134(負号前方有三個空格)

1、先執行第一個for循環,跳過空白符,當i = 3時,跳出循環。

2、執行三元運算符。s[3] =’-’,是以sign = -1。

3、執行if語句,跳過符号,s[3] = ‘-’,是以i自加得4。

4、執行第二個for循環。

第一次循環n = 10 * n + (s[4] - ‘0’) = 100+(49-48)=1

第二次循環n = 10 * n + (s[5] - ‘0’) = 101+(51-48)=13

第三次循環n = 10 n + (s[6] - ‘0’) = 1013+(53-48)=134

然後跳出循環。

5、傳回sign * n = (-1) * 134 = -134。

繼續閱讀