繁体   English   中英

将字符串向量转换为浮点向量或数组

[英]Convert string vector to float vector or array

我正在尝试将字符串矢量转换为浮点矢量,理想情况下,我想将其转换为浮点数组,因为这对我来说比较容易,但是从研究中我了解到,矢量比数组更可取。 这是我仍然是初学者的c + +编码器的代码,我只是有点理解代码大声笑。 当我尝试运行程序时,该程序不断给我和错误,我不知道为什么,但是我知道它与将字符串向量转换为浮点数有关。

#include <vector>
#include <string>
#include <iostream>
#include "sqlite3.h"
#include <cassert>
#include <sstream>
#include <iterator>
#include <algorithm>
using namespace std;

sqlite3* db;

using Records = vector<Record>;

int select_callback(void *p_data, int num_fields, char **p_fields, char **p_col_names)
{
Records* records = static_cast<Records*>(p_data);
try {
  records->emplace_back(p_fields, p_fields + num_fields);
}
catch (...) {
// abort select on failure, don't let exception propogate thru sqlite3 call-stack
return 1;
}
return 0;
}

Records select_stmt(const char* stmt)
{
Records records;  
char *errmsg;
int ret = sqlite3_exec(db, stmt, select_callback, &records, &errmsg);
if (ret != SQLITE_OK) {
  std::cerr << "Error in select statement " << stmt << "[" << errmsg << "]\n";
}
else {
  std::cerr << records.size() << " records returned.\n";
}

return records;
}

void sql_stmt(const char* stmt)
{
char *errmsg;
int ret = sqlite3_exec(db, stmt, 0, 0, &errmsg);
if (ret != SQLITE_OK) {
std::cerr << "Error in select statement " << stmt << "[" << errmsg << "]\n";
}
}

 int main()
{
 if (sqlite3_open("BandDia.db", &db) != SQLITE_OK) {
   std::cerr << "Could not open database.\n";
 return 1;
}

Records records = select_stmt("SELECT * FROM k_EnergyEig_T2 ");
sqlite3_close(db);

vector<float> v;
istringstream iss(Records);

std::copy(std::istream_iterator<float>(iss),
    std::istream_iterator<float>(),
    std::back_inserter(v));

// Put the result on standard out
std::copy(v.begin(), v.end(),
    std::ostream_iterator<float>(std::cout, ", "));
std::cout << "\n";

/*  for (auto& record : records) {
// do something with your records
puts("Hello,World"); 

}*/

return 0;
}

如果我正确理解了这个问题,则您有一个包含逗号分隔值的字符串,并且您希望将其转换为浮点数数组。

我要做的第一件事是将字符串拆分为子字符串。 每个子字符串将包含一个值。 可以在这里找到示例。

接下来要做的是遍历这些字符串并将它们转换为浮点数。 为此,您可以使用atof函数。 atof代表“ a”(字符串)至“ f”(浮点数)。 请注意,您可以使用s.c_str()轻松将std :: string转换为ac字符串。

最后,最好在这里使用向量,因为可以动态调整向量的大小。 如果您确实要将输出转换为数组,则始终可以执行以下操作:

float* a = new float[v.size()];
memcpy(a, &v[0], sizeof(float) * v.size());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM