/* ライブラリ関数atoi, atol, atofと同じ動作を行う関数 int strtoi(const char *nptr) {} long strtol(const char *nptr) {} double strtof(const char *nptr) {} を作成せよ。 */ #include /*---数字文字をint型整数に変換---*/ int strtoi(const char *nptr) { int i = 0; const char *p = nptr; /*最初の文字へのポインタ*/ if(*nptr == '-') nptr++; /*最初の文字が-ならスキップ*/ while(*nptr) { if(*nptr >= '0' && *nptr <= '9') { i += *nptr - '0'; nptr++; if(*nptr >= '0' && *nptr <= '9') i *= 10; /*値を10倍*/ } else break; } if(*p == '-') i = -i; /*最初の文字が-なら値を反転*/ return i; } /*数字文字をlong型整数に変換*/ long strtol(const char *nptr) { int i = 0; const char *p = nptr; /*最初の文字へのポインタ*/ if(*nptr == '-') /*最初の文字が-ならスキップ*/ nptr++; while(*nptr) { if(*nptr >= '0' && *nptr <= '9') { i += *nptr - '0'; nptr++; if(*nptr >= '0' && *nptr <= '9') i *= 10; /*値を10倍*/ } else break; } if(*p == '-') i = -i; /*最初の文字が-なら値を反転*/ return i; } /*---数字文字をdouble型実数に変換---*/ double strtof(const char *nptr) { double d = 0; const char *p = nptr; /*最初の文字へのポインタ*/ double i = 10.0; if(*nptr == '-') nptr++; /*最初の文字が-ならスキップ*/ while(*nptr) { if(*nptr >= '0' && *nptr <= '9') { d += *nptr - '0'; nptr++; if(*nptr >= '0' && *nptr <= '9') d *= 10; /*値を10倍*/ } else break; } if(*nptr == '.') /*ピリオドならポインタをインクリメント*/ nptr++; while(*nptr) { if(*nptr >= '0' && *nptr <= '9') { d += (*nptr - '0') / i; nptr++; i *= 10.0; } else break; } if(*p == '-') d = -d; return d; } int main(void) { char no[32]; printf("整数文字を入力してください:"); scanf("%s", no); printf("入力された数字は%dです。\n", strtoi(no)); printf("整数文字を入力してください:"); scanf("%s", no); printf("入力された数字は%ldです。\n", strtol(no)); printf("実数文字を入力してください:"); scanf("%s", no); printf("入力された数字は%fです。\n", strtof(no)); return 0; }