如何在C++中获取要读取到字符串数组中的输入文件



由于某些原因,我的输入文件中的整行没有读取到数组中,每行只有第一个字。我目前正在使用getline调用,但我不确定它为什么不起作用。以下是我对填充数组的调用所拥有的内容。txt文件是一个歌曲列表。

const int numTracks = 25;
string tracks[numTracks];
int count = 0, results;
string track, END;
cout << "Reading SetList.txt into array" << endl;
ifstream inputFile;
inputFile.open("SetList.txt");
while (count < numTracks && inputFile >> tracks[count])
{
    count++;
    getline(inputFile, track);
}
inputFile.close();
while (count < numTracks && inputFile >> tracks[count])

>>运算符读取单个单词。这个代码将这个单词读入有问题的向量中。

getline(inputFile, track);

没错,您使用的是getline()。将行的其余部分,在初始单词之后,读入一个名为track的无关变量。track看起来是一个非常无聊的std::string,显然,它在循环的每次迭代中都会被覆盖,否则就会被完全忽略。

循环使用operator>>将文件读取到数组中。那个操作员一次读一个字。您需要完全删除该运算符,并使用std::getline()填充数组,例如:

const int numTracks = 25;
std::string tracks[numTracks];
int count = 0;
std::cout << "Reading SetList.txt into array" << std::endl;
std::ifstream inputFile;
inputFile.open("SetList.txt");
while (count < numTracks)
{
    if (!std::getline(inputFile, tracks[count])) break;
    count++;
}
inputFile.close();

或者:

const int numTracks = 25;
std::string tracks[numTracks];
int count = 0;
std::cout << "Reading SetList.txt into array" << std::endl;
std::ifstream inputFile;
inputFile.open("SetList.txt");
while ((count < numTracks) && (std::getline(inputFile, tracks[count]))
{
    count++;
}
inputFile.close();

或者,考虑使用std::vector而不是固定阵列,然后可以使用std::istream_iteratorstd::back_inserter来完全摆脱手动循环:

class line : public std::string {}
std::istream& operator>>(std::istream &is, line &l)
{   
    return std::getline(is, l);
}
...
std::vector<std::string> tracks;
std::cout << "Reading SetList.txt into array" << std::endl;
std::ifstream inputFile;
inputFile.open("SetList.txt");
std::copy(
    std::istream_iterator<line>(inputFile),
    std::istream_iterator<line>(),
    std::back_inserter(tracks)
);
inputFile.close();

相关内容

  • 没有找到相关文章

最新更新