0

我需要一点帮助。这个问题很简单,但对我有限的知识感到抱歉。我想将一维双精度数组转换为这样的字符矩阵..例如..双精度矩阵的第一个元素是

double version[6];
char version_ch[6][6];
version[0]=1.1587

我想将 version[0] 转换为 version_ch[0][5] 等等。每个版本变量都是 6 位数字。任何人都可以帮助我吗?

提前致谢。

4

3 回答 3

2

这个怎么样:

const size_t num_versions = 6;

std::array<double, num_versions> version;
version[0] = 1.1587;
// ...

std::array<std::string, num_versions> version_str;
std::transform(std::begin(version), std::end(version), std::begin(version_str),
    [](const double& value) { return std::to_string(value); });

阅读有关std::array, std::string, std::transform, lambda 表达式std::to_string.

于 2013-09-05T07:43:32.707 回答
0

你所要求的是c ++中的简单糟糕设计。您可以使用以下代码获得结果:

#include <sstream>
#include <iostream>
#include <string>

using namespace std;

int main(){
        double version[4] = {1.2, 3.4, 5.6, 7.8};
        char version_ch[4][3];

        for(unsigned int i = 0; i < 4; i++){
                stringstream ss; 
                ss << version[i];
                string tmp_str = ss.str();
                for(unsigned int j = 0; j < 3; j++){
                        version_ch[i][j] = tmp_str.c_str()[j];
                }   
        }   
}

但是,说真的,你应该修改你的设计!

于 2013-09-05T07:48:11.050 回答
0

如果你真的想要你要求的 char 数组,那么你可以像这样生成它:

#include <cstdio>
#include <cstring>

// ...

    static const size_t VERSION_N_ELEM = 6;
    static const size_t VERSION_STR_LEN = 6;

    double version[VERSION_N_ELEM];
    char version_ch[VERSION_N_ELEM][VERSION_STR_LEN];

    char buf[32];
    for (int i = 0; i < VERSION_N_ELEM; ++i) {
        sprintf(buf, "%.4f", version[i]);
        strncpy(version_ch[i], buf, VERSION_STR_LEN);
    }

这比 c++ 更像是 ac 方法,但话说回来,使用像你这样的数组比 c++ 更像是 ac 方法。在这里使用 sprintf 并不完全安全。如果你的编译器库中有 sprintf_s 或 snprintf,你应该考虑使用它。或使用 stingstreams。

由于您很少提及预期目的,因此您应该知道 char 'matrix' 中的字符串可能不会以空值结尾,因为没有足够的空间。

于 2013-09-05T07:56:07.310 回答