C言語-#8.atoi,atof
はおっ。
数値への変換です。Integer版と float版があります。
atoi
int atoi(const char *s)
{
int sign = 0;
int ret = 0;
while (*s == ' ') {
s++;
} // 先頭の空白を飛ばす
// 符号チェック
switch (*s) {
case '-':
sign = -1;
// fall through
case '+':
s++;
break;
}
while (*s >= '0' && *s <= '9') {
ret = ret * 10 + *s - '0';
s++;
}
return (sign != 0) ? -ret : ret;
}
atof
double atof(const char *s)
{
int sign = 0;
double ret = 0;
double decimal = 1;
while (*s == ' ') {
s++;
} // 先頭の空白を飛ばす
// 符号チェック
switch (*s) {
case '-':
sign = -1;
// fall through
case '+':
s++;
break;
}
// 整数部
while (*s >= '0' && *s <= '9') {
ret = ret * 10 + *s - '0';
s++;
}
// 小数点
if (*s == '.') {
s++;
}
//小数部
while (*s >= '0' && *s <= '9') {
ret = ret * 10 + *s - '0';
decimal *= 0.1;
s++;
}
return ((sign != 0) ? -ret : ret) * decimal;
}
おわり
標準ライブラリでどうやってるかは分からないけど、都合のいいように書いちゃってます。たぶん不足していることは多々あると思われ(空白飛ばしとか)。それでも遜色ない挙動なので知らないよりは知っていた方がいいよってくらいかな。
悉く書を信ずれば則ち書無きに如かず