从文件读取输入并存储到2D阵列中
Reading Input From File and Storing into 2D Array
我需要读入一个只包含整数的文本文件,每个文件都用新行分隔。例如:
0
1
2
...
64
repeating 0 to 64 64 times
本质上,该文件长64*64行,每行包含一个整数。
我需要将每个整数(行)存储在我的2D数组ldisk中,但在这样做时遇到了严重的问题。我知道我的代码有一个错误,因为我试图将字符串存储在char中,但我不知道如何解决这个问题。顺便说一下,ldisk必须是一个二维字符数组 我很想在下面发布一些关于我当前代码的建议/反馈,或者其他解决方案。注意:我是C++的初学者PS:我知道也存在类似的主题,但我的主题更多的是绕过类型转换的问题,或者只是正确地转换它,这样我就可以在2D数组中存储多个个个位数的整数,因为我可以在2D阵列中只存储我想要的第一个数字,但如果超过1个数字,就会遇到问题。
int main(){
char **ldisk;
ldisk = new char*[64];
for (int i = 0; i<64; i++)
{
ldisk[i]= new char[64];
}
int counter = 0;
string line;
ifstream inFile("example2.txt");
while ( getline(inFile, line))
{
int first, second;
first = counter/64;
second = counter%64;
cout << line;
ldisk[first][second]= line;
}
return 0;
}
编辑:抱歉,我不知道该怎么摆桌子。
I want ldisk[0][0] to be 0,
then ldisk[0][1] to be 1,
then ldisk[0][2] to be 2,
etc,
etc,
then ldisk[0][63] to be 64
最终,它将被填满,使得ldisk[63][64
这就是问题所在:
ldisk[first][second]= line;
ldisk[first][second]
的类型为char
。您正试图为其分配一个std::string
。
使用std::vector<std::string>
可以让你的生活变得简单很多。
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int main(){
vector<string> ldisk;
int counter = 0;
string line;
ifstream inFile("example2.txt");
while ( getline(inFile, line))
{
cout << line;
ldisk.push_back(line);
}
return 0;
}
更新
如果必须具有char** ldisk
,则可以将main
更改为:
int main()
{
char **ldisk;
ldisk = new char*[64];
for (int i = 0; i<64; i++)
{
ldisk[i]= new char[64];
}
int counter = 0;
string line;
ifstream inFile("example2.txt");
while ( getline(inFile, line) && counter < 64 )
{
cout << line << endl;
if ( line.size() >= 64 )
{
cout << "Line is longer than 63 characters. Copying only 63 characters from it.n";
strncpy(ldisk[counter], line.c_str(), 63);
ldisk[counter][63] = ' ';
}
else
{
strcpy(ldisk[counter], line.c_str());
}
++counter;
}
return 0;
}
将循环更改为:
for (counter = 0; counter < 64*64; ++counter)
{
int item;
if ( !(inFile >> item) )
{
cerr << "File only contained " << counter << "items.n";
return 1;
}
if ( item < CHAR_MIN || item > CHAR_MAX )
{
cerr << "Item " << counter << " invalid value " << item << "n";
return 2;
}
ldisk[counter/64][counter%64] = item;
}
缺少的因素是您没有尝试将文件中的字符串转换为整数值。您可能需要#include <climits>
。
相关文章:
- 库特<<恩德尔;不适用于打印 2D 阵列
- 具有可变尺寸的 C++ 2D 阵列
- 如何遍历 2D 阵列?
- 超级对撞机2D阵列:生成嵌套:包装/尺寸问题
- 动态 2D 阵列.为什么分段错误?
- 尝试使用2D阵列
- 分配给阵列时出现分段错误?黑客排名 2D 阵列 - DS.
- 如何将1D阵列访问为2D阵列
- 分配/访问2d阵列,使得2d子块是连续的
- 重新分配2D阵列并删除旧阵列
- 不使用新的动态2D阵列
- 我正在为2D阵列参数而挣扎
- 特征和巨大的密集 2D 阵列
- 使用 std::transform 在 2d C 阵列上转换为 1d C 数组
- 解除分配此特定 2D 阵列的内存
- 使用两个不同大小的一维阵列制作 2D 阵列
- 返回C 中2D阵列的对角线元素总和
- 2D阵列让我卡住了
- 用pybind11铸造2D阵列
- 我的 2D 阵列无法读取文本文件并正确输出