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。