このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

文字列を数値に

そろそろ、次の課題の解答例を挙げておこう。

  • 符号なし('+', '-'が付かない)十進整数を表現する文字列を数値(コンピュータが通常は整数と認識するであろうデータ)に変換する関数

素直に無駄なく、直球勝負で書けばこんな感じだろう。


/* 符号なし整数の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]));
}
}

先頭の符号('+'と'-')を解釈するようにはしたほうがいいだろう(どうなる?)。

エラーチェックコードとか入れたくなるかも知れないが、やらないほうがいい。正しい構文の引数を準備するのは呼ぶ側の責任だから、変な引数に対して変なことをしても別にいいのだ。例外がない環境でのエラーの返し方は別の機会に。