C言語関係掲示板

過去ログ

No877 atoi()の自作

[戻る] [ホームページ]
No.11374

atoi()とgets()について
投稿者---さぼてん(2003/12/21 15:03:46)


引数の文字列内にASCIIコードで格納されている10進の正の整数をint型に直す関数を作成せよ。使い方は標準関数atoiと同じとする。

型   :int myatoi(char *a);
引数  :文字が入っている領域の先頭アドレス
戻り値 :変換された結果の整数
処理方法;1文字づつASCIIコードをそれの示す数に直し、10のべき乗をかけて加える。

このような問題があるんですけど、分かりません!
標準関数aotiは、例えばアドレスa以下に文字として格納されれいる数字を10進数とみなしてint型に変換するものですよね!?
上の問題だと10のべき乗をかけて加えるのだったら、stdlib.nをincludeせずにプログラムを作成するってことなのでしょうか?
教えてください!!

No.11377

Re:atoi()とgets()について
投稿者---たか(2003/12/21 16:16:38)


>処理方法;1文字づつASCIIコードをそれの示す数に直し、10のべき乗をかけて加える。

べき乗を掛けるとなると、最初に0〜9以外の文字が出てくるまでの文字数
をカウントして、それからべき乗数を決める必要があります。従って以下
のプログラムは題意に沿っていませんが「ホーナー法でやりました」とで
もコメントしておくといいでしょう。

#include <stdio.h>
#include <ctype.h>

int myatoi(char *a);

int main(void)
{
  char buf[128];
  
  while (1) {
    printf("十進数を入力して下さい: ");
    if (scanf("%s", buf)) break;
  }
  
  printf("変換の結果: %d\n", myatoi(buf));
  
  return 0;
}

int myatoi(char *a)
{
  int i = 0, sign = 1;

  while (isspace(*a)) a++;
  if (*a == '-') {
    sign = -1;
    a++;
  }
  while (*a && isdigit(*a))
    i = i * 10 + *a++ - '0';
  
  return sign * i;
}