C++ ifstream 拆分 w.r.t. 一个角色
C++ ifstream split w.r.t. a character
我想逐行C++读取文件,并将每行w.r.t拆分为"t"
字符,以便填写矩阵。 我的代码会像这样
ifstream data_x;
double** test_data = new double*[100];
for(int j = 0 ; j < ; j++)
test_data[j] = new double[4];
data_x.open("X.txt");
int i = 0;
if (data_x.is_open())
{
while (!data_x.eof())
{
char** split = data_x.split("t")
for(int k = 1 ; k < 4 ; k++)
test_data[i][k];
i++;
}
}
data_x.close();
ifstream data_y;
data_y.open("Y.txt");
i = 0;
if (data_y.is_open())
{
while (!data_y.eof())
{
data_y >> test_data[i][0];
i++;
}
}
data_y.close();
其中语法
char** split = data_x.split("t")
for(int k = 1 ; k < 4 ; k++)
test_data[i][k];
是近似的。 如何用C++正确地做到这一点?
谢谢
假设您的文件只包含数字,以下是标准的C++习语:
#include <vector>
#include <string>
#include <sstream>
#include <fstream>
std::ifstream infile("data.txt");
std::vector<std::vector<double>> matrix;
for (std::string line; std::getline(infile, line); )
{
std::istringstream iss(line);
std::vector<double> row;
for (double d; iss >> d; )
{
row.push_back(d);
}
matrix.push_back(row);
}
如果您知道矩阵的大小,则可以添加相关的reserve
调用以避免向量重新分配。您还可以添加测试,以确定一行上是否有任何无法识别的数据,但现在这应该可以让您开始。
用空格分隔的实体创建向量实际上是微不足道的:
std::vector<T> fields(
std::istream_iterator<T>(
d::istringstream(line) >> std::skipws),
std:.istream_iterator<T>()));
如果您的单元格类型 T
会考虑't'
以外的其他空格作为分隔符,您可能希望使用修改后的std::ctype<char>
面更改被视为空间的内容。
显然,上面的逻辑可以打包成一些更容易使用的 finction。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '