文字列を数値に
そろそろ、次の課題の解答例を挙げておこう。
- 符号なし('+', '-'が付かない)十進整数を表現する文字列を数値(コンピュータが通常は整数と認識するであろうデータ)に変換する関数
素直に無駄なく、直球勝負で書けばこんな感じだろう。
/* 符号なし整数のatoi、自家製版 *//**
* 制限:
* 引数の文字列は符号なし('+', '-'が付かない)十進整数の表現だとする.
*/
string_to_integer(char *s)
{
int val;
for (val = 0; *s; s++) {
val = val*10 + (*s - '0');
}
return val;
}// お試し用のmain
main()
{
char *strs[] = {
"123",
"007",
"76543210",
"0",
"+5", // これはダメ
"-1", // これもダメ
"abc", // 全然ダメ
};
int i;
for (i = 0; i < (sizeof(strs)/sizeof(char*)); i++) {
printf("(%d) \"%s\" ==> %d\n",
i, strs[i], string_to_integer(strs[i]));
}
}
先頭の符号('+'と'-')を解釈するようにはしたほうがいいだろう(どうなる?)。
エラーチェックコードとか入れたくなるかも知れないが、やらないほうがいい。正しい構文の引数を準備するのは呼ぶ側の責任だから、変な引数に対して変なことをしても別にいいのだ。例外がない環境でのエラーの返し方は別の機会に。