gpt4 book ai didi

c++将文本文件读入 vector 然后根据内部 vector 中的第一个单词写入 vector 或数组

转载 作者:搜寻专家 更新时间:2023-10-31 01:07:50 26 4
gpt4 key购买 nike

这是我发布的问题 c++ program for reading an unknown size csv file (filled only with floats) with constant (but unknown) number of columns into an array 的进展.我现在转到真正的应用程序,我在其中读取了一个文件,例如:

MESH2D
MESHNAME "default coverage"
NUM_MATERIALS_PER_ELEM 1
E4Q 1 19 20 14 16 2
E4Q 2 17 16 15 23 2
E4Q 3 22 15 14 21 2
E4Q 4 4 3 21 20 1
E4Q 5 6 20 19 7 1
E4Q 6 18 17 10 9 1
E4Q 7 17 23 12 11 1
E4Q 8 7 19 18 8 1
E4Q 9 22 1 13 23 1
E3T 10 14 20 21 2
E3T 11 21 2 22 1
E3T 12 21 3 2 1
E3T 13 22 2 1 1
E3T 14 5 20 6 1
E3T 15 20 5 4 1
E3T 16 16 14 15 2
E3T 17 23 13 12 1
E3T 18 22 23 15 2
E3T 19 17 11 10 1
E3T 20 17 18 16 2
E3T 21 8 18 9 1
E3T 22 18 19 16 2
ND 1 -3.25811078e+002 7.70285567e+001 0.00000000e+000
ND 2 -3.24209146e+002 7.60394871e+001 0.00000000e+000
ND 3 -3.23012110e+002 7.44783503e+001 0.00000000e+000
ND 4 -3.22754089e+002 7.25326647e+001 0.00000000e+000
ND 5 -3.23617358e+002 7.08079432e+001 0.00000000e+000
ND 6 -3.25161538e+002 6.98134116e+001 0.00000000e+000
ND 7 -3.27128620e+002 6.98759747e+001 0.00000000e+000
ND 8 -3.29095703e+002 6.99385378e+001 0.00000000e+000
ND 9 -3.30301095e+002 7.14667646e+001 0.00000000e+000
ND 10 -3.30786908e+002 7.33241555e+001 0.00000000e+000
ND 11 -3.30835733e+002 7.52916270e+001 0.00000000e+000
ND 12 -3.29587322e+002 7.65401204e+001 0.00000000e+000
ND 13 -3.27743000e+002 7.72270000e+001 0.00000000e+000
ND 14 -3.26108525e+002 7.32067724e+001 0.00000000e+000
ND 15 -3.27041416e+002 7.42070316e+001 0.00000000e+000
ND 16 -3.27350377e+002 7.31716751e+001 0.00000000e+000
ND 17 -3.29153676e+002 7.40024406e+001 0.00000000e+000
ND 18 -3.28659180e+002 7.19967464e+001 0.00000000e+000
ND 19 -3.26845856e+002 7.14062637e+001 0.00000000e+000
ND 20 -3.25000347e+002 7.20534611e+001 0.00000000e+000
ND 21 -3.24701329e+002 7.39638966e+001 0.00000000e+000
ND 22 -3.26167714e+002 7.53360591e+001 0.00000000e+000
ND 23 -3.28060316e+002 7.54194849e+001 0.00000000e+000
BEGPARAMDEF
GM "Mesh"
SI 0
DY 0
TU ""
TD 0 0
NUME 3
BCPGC 0
DISP_OPTS entity 0 0 0 0 1 0 0 0
DISP_OPTS inactive 0 0 0 0 1 0 0 0
DISP_OPTS multiple 0 0 0 0 1 0 0 0
BEFONT 0 1
DISP_OPTS entity 1 0 0 0 1 0 0 0
DISP_OPTS inactive 1 0 0 0 1 0 1 0
DISP_OPTS multiple 1 0 0 0 1 0 1 0
BEFONT 1 1
DISP_OPTS entity 2 0 0 0 1 0 0 0
DISP_OPTS inactive 2 0 0 0 1 0 1 0
DISP_OPTS multiple 2 0 0 0 1 0 1 0
BEFONT 2 1
MAT 1 "material 01"
MAT 2 "material 02"
MAT_MULTI 0
ENDPARAMDEF
BEG2DMBC
END2DMBC
BEGCURVE Version: 1
ENDCURVE

调用“example.2dm”并尝试为存储在以 E4Q E3T 和 ND 开头的行中的数据写入 3 个二维 vector (或可能(最好)数组)。我想使用这些单元格定义来打印带有单元格中心的文件。

我认为将此类问题记录在此处非常有用,因为我的最后一个问题不断获得关注。

到目前为止我的代码是:

// Read in CSV
//
// Alex Byasse

#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
#include <cstdlib>

enum case_name {e3t, e4q, nd};

case_name checkit(std::string const& inString)
{
if (inString == "E3T") return e3t;
if (inString == "E4Q") return e4q;
if (inString == "ND") return nd;
}

int main()
{
std::vector<std::vector<std::string>> values;
std::ifstream fin("example.2dm");
for (std::string line; std::getline(fin, line); )
{
std::istringstream in(line);
values.push_back(
std::vector<std::string>(std::istream_iterator<std::string>(in),
std::istream_iterator<std::string>()));
}

int nc = 0;
int nn = 0;

std::vector<std::vector<double>> cells;
std::vector<std::vector<double>> nodes;

for (int i = 0; i < values.size() - 1; i++) {
switch (checkit(values[i][0])){
case e3t:
cells[nc].push_back(std::stod(values[i][1]));
cells[nc].push_back(std::stod(values[i][2]));
cells[nc].push_back(std::stod(values[i][3]));
cells[nc].push_back(std::stod(values[i][4]));
cells[nc].push_back(std::stod(values[i][2]));
cells[nc].push_back(std::stod(values[i][5]));
nc++;
break;
case e4q:
cells[nc].push_back(std::stod(values[i][1]));
cells[nc].push_back(std::stod(values[i][2]));
cells[nc].push_back(std::stod(values[i][3]));
cells[nc].push_back(std::stod(values[i][4]));
cells[nc].push_back(std::stod(values[i][5]));
cells[nc].push_back(std::stod(values[i][6]));
nc++;
break;
case nd:
nodes[nn].push_back(std::stod(values[i][1]));
nodes[nn].push_back(std::stod(values[i][2]));
nodes[nn].push_back(std::stod(values[i][3]));
nn++;
break;
}
}
}

我能得到一些帮助修复这段代码吗?这是正确的吗?

#include <cstdlib>

我收到以下编译错误:

$ g++ read_csv2.cpp -std=c++0x
read_csv2.cpp: In function ‘int main()’:
read_csv2.cpp:44:26: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:45:33: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:46:26: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:47:33: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:48:33: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:49:33: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:53:26: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:54:26: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:55:26: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:56:26: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:57:26: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:58:26: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:62:26: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:63:26: error: ‘stod’ is not a member of ‘std’
read_csv2.cpp:64:26: error: ‘stod’ is not a member of ‘std’

我在 cygwin 上运行 g++。我已经检查了手册页,-std=c++11 是一个可用选项,我已经尝试过了,但我得到了同样的错误?

最佳答案

您的程序产生了很多编译错误。我建议你多花点时间阅读 C++ 和 STL 的基础知识。

  1. std::vector<std::vector<std::string>> values;std::vector<std::vector<std::string> > values; .注意区别,一些 C++ 编译器将采用 >>作为右移运算符。

  2. 在代码的许多地方,您只使用了 vector而不是 std::vector .更正此问题或考虑添加 using namespace std;在主函数之前。

  3. double是原始类型。没有什么叫std::double .

  4. 更改 vector::size(values)-1values.size() - 1 .

  5. 使用 ;而不是 ,for 的三部分分开声明。

  6. switch values[i][0]应该是switch (values[i][0]) .

  7. E3T是一个字符串,所以你使用 "E3T"而不是 'E3T' .单引号用于字符。

  8. C++不支持switch与字符串,所以使用 if-else-if相反。

关于c++将文本文件读入 vector<vector> 然后根据内部 vector 中的第一个单词写入 vector 或数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18841663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com