atoi関数:文字列を数値に変換
itoa関数:数値を文字列に変換
以上の関数が使えない場合の関数を作りました。
atoi関数の場合
int atoi(char c)
{
int i;
int K[10];
for (i = 0; i < 10; i++)
{
K = i;
}
return(c-48);
}
int main(void)
{ printf("%d", Datoi('1')); getchar();
}
itoa関数の場合
char itoa(int I)
{}
の場合がわかりません。
学習初心者で説明がへたくそですが、よろしくお願いいたします。><
atoi 関数 itoa関数
Re: atoi 関数 itoa関数
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
引き算の逆は足し算です。
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
ここに載っているatoi関数と同様に1文字だけ対応すれば良いのであれば、素直にここに載っているatoi関数の逆をやればいいと思います。hazimete さんが書きました:itoa関数の場合
char itoa(int I)
{}
の場合がわかりません。
引き算の逆は足し算です。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: atoi 関数 itoa関数
c は char です。hazimete さんが書きました:atoi関数:文字列を数値に変換
itoa関数:数値を文字列に変換
以上の関数が使えない場合の関数を作りました。
atoi関数の場合
int atoi(char c)
これは「文字」であって「文字列」ではありません。
"-365" という文字列は、-365 という int の値に
変換しなければなりません。
itoa は標準関数ではありませんが、atoi と itoa の
プロトタイプ宣言は、Wikipedia によると、
int atoi(const char *nptr);
char *itoa(int value, char *str, int radix);
解決になってしまったので、もう手遅れかもしれませんが、
ちょっとインチキな解答です。
#include <stdio.h>
#include <stdlib.h>
int my_atoi(const char *str)
{
return strtol(str, NULL, 10);
}
char *my_itoa(int val, char *str, int radix)
{
char buf[33], *p = buf, *q = str;
unsigned u = radix == 10 && val < 0 ? *q++ = '-', -val : val;
do {
*p++ = "0123456789abcdefghijklmnopqrstuvwxyz"[u % radix];
} while (u /= radix);
do *q++ = *--p; while (p > buf);
*q = 0;
return str;
}
int main(void)
{
char *str = "-365";
int i = my_atoi(str);
printf("%d\n", i);
char buf[33];
my_itoa(2017, buf, 10);
puts(buf);
return 0;
}
radix が 2~36 の範囲にない場合は未定義動作です。
再帰呼出し版の itoa
char *utoa(unsigned val, char *str, int radix)
{
char *p = val < radix ? str : utoa(val / radix, str, radix);
*p = "0123456789abcdefghijklmnopqrstuvwxyz"[val % radix];
return p + 1;
}
char *my_itoa(int val, char *str, int radix)
{
int neg = radix == 10 && val < 0;
*utoa(neg ? *str = '-', -val : val, str + neg, radix) = 0;
return str;
}