Как преобразовать двойное значение в массив символов после использования strtod? в С - PullRequest
0 голосов
/ 04 ноября 2018

Например, преобразование символа строки, содержащей:

{x1 5.12 x2 7.68 x3}

чтобы удвоить значения были преобразованы в:

0.0000005.1200000.0000007.6800000.000000

Как мне преобразовать эти двойные значения так, чтобы он создал массив символов, который должен быть:

{0.000000,5.120000,0.000000,7.680000,0.000000}

Я искал везде, чтобы сделать это преобразование, и, кажется, ничего не работает. Если кто-то может предоставить код для этого преобразования. Вот мои коды:

void exSplit(char newEx[50]){             //newEx[50] contains {x1 5.12 
                                            x2 7.68 x3}

    char *delim = " ";
    char *token = NULL;
    char valueArray[50];
    char *aux;
    int i;

    for (token = strtok(newEx, delim); token != NULL; token = 
    strtok(NULL, delim))
    {
            char *unconverted;
            double value = strtod(token, &unconverted);

                    printf("%lf\n", value);

    }

}

1 Ответ

0 голосов
/ 04 ноября 2018

Вы можете использовать scanf для поиска поплавка. Если поплавок найден, вы выводите его в строку результата. Если число с плавающей запятой не найдено, вы выводите нули в строку результата.

Это может выглядеть так:

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

int main(void) {
    char newEx[] = "{x1 5.12 x2 7.68 x3}";
    char *token;
    char result[100] = "{";
    char temp[100];
    int first = 1;
    float f;

    for (token = strtok(newEx, " "); token != NULL; token = strtok(NULL, " "))
    {
        if (first != 1)
        {
            strcat(result, ",");
        }
        first =0;
        if (sscanf(token, "%f", &f) == 1)
        {
            sprintf(temp, "%f", f);
        }
        else
        {
            sprintf(temp, "0.000000");
        }
        strcat(result, temp);
    }
    strcat(result, "}");
    printf("%s\n", result);

    return 0;
}

Выход:

{0.000000,5.120000,0.000000,7.680000,0.000000}

Примечание. Для простоты приведенного выше примера кода проверка переполнения буфера отсутствует. В реальном коде вы должны убедиться, что sprint и strcat не переполнят целевой буфер.

...