我需要一些帮助。问题很简单,但对于我有限的知识感到抱歉。我想将1D双数组转换为像这样的char矩阵...例如,双矩阵的第一个元素是
double version[6];
char version_ch[6][6];
version[0]=1.1587
我想将版本[0]转换为version_ch [0] [5],依此类推。每个版本变量是6位数。任何人都可以帮助我。
提前致谢。
答案 0 :(得分: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 expressions和std::to_string
。
答案 1 :(得分: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];
}
}
}
但是,说真的,你应该修改你的设计!
答案 2 :(得分: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方法,而不是c ++,但是再一次,使用像你这样的数组更像是c方法而不是c ++。在这里使用sprintf并不完全安全。如果您的编译器库中有sprintf_s或snprintf,则应考虑使用它。或使用stingstreams。
由于你对预期目的的说法很少,你应该知道char'矩阵'中的字符串可能不会因为没有足够的空间而终止。