上記のすべてを含む完全なプログラムを作成しました ファイルの読み込み方法を少し変更しました-最初のパラメーターがストリーム名である getline() を呼び出す方法に慣れていないので、作成しました個々の要素を読み込むための文字バッファーで、それらをペアにコピーします。また、2 つの要素が読み取られない場合に備えて、ファイルの最後でおかしなことをしないようにします (ファイルの最後に \n があるかどうかに関係なく機能します)。
#include <fstream>
#include <iostream>
#include <list>
#define BUF 100
using namespace std;
int main() {
std::ifstream myReadFile;
std::list<std::pair<std::string,std::string> > startTape;
std::pair<std::string,std::string> pair;
char sbuf[BUF]; // temp storage for file read
myReadFile.open("listOwords.txt");
if(!myReadFile) {
cerr << "Error: file could not be opened" << endl;
exit(1);
}
cout << "file opened successfully" << endl;
while(myReadFile.getline(sbuf, BUF, ',')) {
pair.first = sbuf;
myReadFile.getline(sbuf, BUF);
pair.second = sbuf;
if(myReadFile.good()) {
// only process if both elements were read successfully
// this deals with the problem of a "half pair" being read if the file is terminated with \n
startTape.push_back(pair);
cout << "read a pair: " << pair.first << ", " << pair.second << endl;
}
}
myReadFile.close();
cout << "Size of startTape is now " << startTape.size() << endl;
std::pair<std::string,std::string> firstCompare = startTape.front();
startTape.remove(*startTape.begin());
cout << "Size of startTape is now " << startTape.size() << endl;
std::pair<std::string,std::string> secondCompare = startTape.front();
startTape.remove(*startTape.begin());
cout << "Size of startTape is now " << startTape.size() << endl;
exit(0);
}
listOwords の内容:
>cat listOwords.txt
N, C
I, G
A, U
H, A
G, M
C, I
S, H
U, N
これから得られる出力は次のとおりです。
file opened successfully
read a pair: N, C
read a pair: I, G
read a pair: A, U
read a pair: H, A
read a pair: G, M
read a pair: C, I
read a pair: S, H
read a pair: U, N
Size of startTape is now 8
Size of startTape is now 7
Size of startTape is now 6
この正確なコードで同じ結果が得られない場合はお知らせください。