【问题标题】:How to convert double value into an char array after using strtod? in C使用strtod后如何将double值转换为char数组?在 C 中
【发布时间】:2019-04-07 22:41:18
【问题描述】:

例如,转换一个字符串中包含的字符:

{x1 5.12 x2 7.68 x3}

to double 值已转换为:

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);

    }

}

【问题讨论】:

  • 这个{0.000000,5.120000,0.000000,7.680000,0.000000} 看起来不像一个字符数组,而是一个浮点数数组。
  • 如果你想要一个字符串,为什么要将输入字符串转换为双精度值?

标签: c arrays string type-conversion double


【解决方案1】:

您可以使用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}

注意:为了保持上面的代码示例简单,没有检查缓冲区溢出。在实际代码中,您应该确保sprintstrcat 不会溢出目标缓冲区。

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 2013-03-13
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多