変数の命名法がよくわからないため、なおのこと読みづらいコードになっていると思いますが、その点も含めて酷評希望です。
#include <stdio.h>
#include <TCHAR.h>
#include <math.h>
double my_tstof(TCHAR buf[]);
int main(void){
double x;
if((x=my_tstof(_T("-1.45"))) == NULL)
printf("Error\n");
return 0;
}
double my_tstof(TCHAR buf[]){ //double型の変域が広すぎるが利用しないため符号含めず小数点含め16桁の範囲で行う(double型の変域+-10^-307~ +-10~308)
double ans=0;
TCHAR hugo;
TCHAR x[16];
TCHAR numbuf[2];
int Pcount=0; //小数点の位置、x[0]を位置0としたときの数値を代入する(小数点を除く前の時点で) 小数点を除いた文字数-Pcountの10乗でansを最終的に除算
int k;
//符号を取り除く
if(buf[0] == '+' || buf[0] == '-'){
hugo = buf[0];
for(int k=0;k<(int)_tcslen(buf);k++){
x[k] = buf[k+1];
}
}
//小数点の個数が1個以下であるかを確かめる また、小数点の位置を記録する
k=0;
if(x[0] == '.') //エラー、数値として正しくない
return NULL;
for(int i=0;i<(int)_tcslen(x);i++){ //kは小数点の数をこのループ内では表す
if(x[i] == '.'){
k++;
Pcount=i;
}
if(k >= 2)
return NULL;
}
//小数点を取り除く
k=0;
for(int i=0;i<(int)_tcslen(x);i++){
if(x[i] != '.'){
x[k++] = x[i];
}
}
x[k++]='\0';
//ansに自然数としてx[]から格納
numbuf[1]='\0';
k=(int)_tcslen(x);
for(int i=0;i<(int)_tcslen(x);i++){
numbuf[0]=x[i];
k--;
ans = ans+((int)_ttoi(numbuf)*(int)pow((double)10,(double)k));
}
//符号と小数点の処理
ans = ans / (pow((double)10,(double)(_tcslen(x)-Pcount)));
if(hugo == '-')
ans = ans *(-1);
return ans;
}