アプリ版:「スタンプのみでお礼する」機能のリリースについて

atoi という関数がありますが、これを自作しているページがあれば教えてください。もしくは、直接回答でも構いません。自分で書いているんですが、どうもポインタで失敗しているようなので、参考になるようなソースがあれば御紹介ください。

A 回答 (5件)

こんなページがあります。



「次頁」に回答例がありソースがあります。

参考URL:http://www.sgnet.co.jp/c/9-1.htm
    • good
    • 0
この回答へのお礼

ありがとうございました。
そのままコピーしてつかえましたので、大変参考になりました。

お礼日時:2003/09/01 18:13

自作している理由が「atoiではエラーが取得できない」であれば、


strtolを使うのが簡単です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
エラーの問題ではありませんが・・・strtol についても
調べてみたいと思います。初耳です。

お礼日時:2003/09/01 18:18

自作で作りましたが、こんなのでいいですか?


int _atoi(const char* buf)
{
inti, ans, ret;

if(*buf == '-')ans = -1;
elseans = 1;

i = ret = 0;
while(1){
if( (48 <= *(buf + i)) && (*(buf + i) <= 57) ){
ret *= 10;
ret += (*(buf + i) - 48);
}
else if(*(buf + i) == '\0')break;
i++;
}
return ans * ret;
}
    • good
    • 0
この回答へのお礼

ありがとうございました。
同じ関数書くのでも、ひとそれぞれ、やっぱり違うんだな
ーと感じました。
基本となる処理は同じようですので、その部分を参考にさせていいただきます。

お礼日時:2003/09/01 18:17

直接回答でもいいということなので。



#include <ctype.h>

int myatoi(const char *p)
{
int n = 0;
int s = 1;

/* ホワイトスペースをスキップ */
while (isspace(*p)) {
p++;
}

/* 符号の取得 */
if (*p == '-') {
s = -1;
p++;
}
else if (*p == '+') {
p++;
}

/* 数値の取得 */
while (isdigit(*p)) {
n = n * 10 + *p - '0';
p++;
}

/* 結果を返す */
return n * s;
}
    • good
    • 1
この回答へのお礼

ありがとうございます。わざわざソースを書いていただきまして、感謝で痛み入ります。

お礼日時:2003/09/01 18:15

こんばんは。

紹介しようとしたページは asuca さんに先を越されてしまいましたが、
元ネタはそのページにあるようにC言語の父、カーニハンとリッチーの
「プログラミング言語C(第2版)」(石田晴久訳、共立出版)に書かれています。

この本は著者2名(Kernighan, Ritchie)の頭文字を取って「K&R」と呼ばれる古典作で、
自作版の atoi() の限界も記述されていますので、ぜひ読んでみて下さい。
http://www.chienowa.co.jp/frame1/ijinden2/Brian_ …

参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4320026 …
    • good
    • 0
この回答へのお礼

良書を御紹介いただきまして、ありがとうございます。
明日にでも書店で探してみたいとおもいます。

お礼日時:2003/09/01 18:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!