簡體   English   中英

如何獲取輸入文件以讀取C ++中的字符串數組?

[英]How do I get an input file to read into a string array in 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM