我有一个文本文件,格式有点像这样:
1 3 4 5 6
6 7 8
4 12 16 17 18 19 20
20
0
一行可以包含1到10000个整数。我需要做的是逐行阅读所有这些内容。
像这样的伪代码:
line=0;
i=0;
while(!file.eof()){
while(!endLine){
array[0][i++]=file.readChar();
}
line++;i=0;
}
所以,我有一个数组,我想读取每一行,每一行都包含这些整数。
我遇到的问题是如何检查线路的末端是否已经到来。
注意,我不能使用字符串。
是的,这是作业,但作业的主要任务是建立一个树然后进行转换。我可以这样做,但我不知道如何从文件中读取整数。
答案 0 :(得分:4)
可能是这样的:
在读取int之后,我手动跳过空格,制表符,回车符和行尾(对于这个,你必须实现你的逻辑)。
要读取int,我使用ifstream
的C ++函数直接读取它。我不是逐个字符地读它,然后把它重新组成一个字符串:-)
请注意,我将\r
作为“空格。我的行尾为\n
。
#include <iostream>
#include <fstream>
#include <vector>
int main()
{
std::ifstream file("example.txt");
std::vector<std::vector<int>> ints;
bool insertNewLine = true;
int oneInt;
//The good() here is used to check the status of
//the opening of file and for the failures of
//peek() and read() (used later to skip characters).
while (file.good() && file >> oneInt)
{
if (insertNewLine)
{
std::vector<int> vc;
ints.push_back(vc);
//With C++11 you can do this instead of the push_back
//ints.emplace_back(std::vector<int>());
insertNewLine = false;
}
ints.back().push_back(oneInt);
std::cout << oneInt << " ";
int ch;
while ((ch = file.peek()) != std::char_traits<char>::eof())
{
if (ch == ' '|| ch == '\t' || ch == '\r' || ch == '\n')
{
char ch2;
if (!file.read(&ch2, 1))
{
break;
}
if (ch == '\n' && !insertNewLine)
{
std::cout << std::endl;
insertNewLine = true;
}
}
else
{
break;
}
}
}
//Here we should probably check if we exited for eof (good)
//or for other file errors (bad! bad! bad!)
return 0;
}
答案 1 :(得分:2)
有一个名为getline()的函数会读取整行。 Link
答案 2 :(得分:0)
您需要一个函数来从文件中读取值或指示行尾或文件结束条件,如:
result_type GetNextValue (input_file, &value)
{
if next thing in file is a number, set value and return number_type
if next thing in file is an end of line, return end_of_line_type
if end of file found, return end_of_file_type
}
然后你的数组构建循环变为:
line = 0
item = 0
eof = false
while (!eof)
{
switch (GetNextValue (input_file, value))
{
case value_type:
array [line][item++] = value
case end_of_line_type:
line++;
item = 0;
case end_of_file_type:
eof = true
}
}
我会把详细信息留给你,因为它是家庭作业。
答案 3 :(得分:0)
您可以读取字符中的数字并检查回车。我刚试过的一个片段如下:
ifstream ifile;
ifile.open("a.txt");
char ch;
while((ch = ifile.get()) != EOF)
{
std::cout<<ch<<"\n";
if (ch == '\n')
std::cout<<"Got New Line";
}
ifile.close();