巨人の肩の上に登る

先人の積み重ねた発見に基づいて、なにかを発見しようとすることを指す。

文字列を数値に変える関数

久しぶりにC言語を書いてみた.

文字列を数値に変える関数

仕様
関数名:string2double
引 数:char*
返り値:double

浮動小数点、正負の文字列に対応

#include<stdio.h>
#include<math.h>
#include<string.h>

double string2double(char*);

int main (void)
{
    
    char *str = "-1234.567";
    double v = string2double(str);
    printf("%lf\n", v);
    
    return 0;
}

double string2double(char* str)
{

    int len = strlen(str);
    int begin = 0;
    int flag = 1;
    double val = 0.0;
    double weight = 1.0;
    
    if (str[0] == '-') {
        begin = 1;
        flag *= -1;
    }

    for (int i=len-1; i>=begin; i--) {
        if (str[i] == '.') {
            weight /= pow(10, (len - 1 - i));
        }
    }

    for (int i=len-1; i>=begin; i--) {
        if (str[i] == '.') continue;
        val += weight * (double)(str[i] - '0');
        weight *= 10.0;
    }

    return flag * val;
}
$ gcc string2double.c -o string2double -lm
$ ./string2double
-1234.567000