[英]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数组中只存储我想要的第一个数字的地方工作,但是如果超过一个数字,就会遇到问题。
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] [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] = '\0';
}
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>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.