如何逐行读取文件并分隔行组成部分?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何逐行读取文件并分隔行组成部分?相关的知识,希望对你有一定的参考价值。
我是C ++的新手(我通常使用Java),并且正在尝试创建kary堆。我想将文件中的值插入堆中;但是,我对我想做的事情的代码不知所措。
我想像在Java中使用扫描器一样使用.nextLine
和.hasNextLine
,但是我不确定它们是否适用于C ++。同样,在文件中,这些项目也按如下方式列出:"IN 890"
,"IN 9228"
,"EX"
,"IN 847"
等。"IN"
部分告诉我插入,"EX"
部分用于我的extract_min。我不知道如何在C ++中分隔字符串和整数,因此我只能插入数字。
int main(){
BinaryMinHeap h;
string str ("IN");
string str ("EX");
int sum = 0;
int x;
ifstream inFile;
inFile.open("test.txt");
if (!inFile) {
cout << "Unable to open file";
exit(1); // terminate with error
}
while (inFile >> x) {
sum = sum + x;
if(str.find(nextLin) == true //if "IN" is in line)
{
h.insertKey(nextLin); //insert the number
}
else //if "EX" is in line perform extract min
}
inFile.close();
cout << "Sum = " << sum << endl;
}
结果应仅将数字添加到堆中或提取最小值。
答案
查看各种std::istream
实现-std::ifstream
,std::istringstream
等。您可以循环调用std::getline()
以逐行读取std::ifstream
,并使用std::istringstream
解析每一行。例如:
int main() {
BinaryMinHeap h;
string line, item;
int x sum = 0;
ifstream inFile;
inFile.open("test.txt");
if (!inFile) {
cout << "Unable to open file";
return 1; // terminate with error
}
while (getline(inFile, line)) {
istringstream iss(line);
iss >> item;
if (item == "IN") {
iss >> x;
sum += x;
h.insertKey(x);
}
else if (item == "EX") {
// perform extract min
}
}
inFile.close();
cout << "Sum = " << sum << endl;
return 0;
}
以上是关于如何逐行读取文件并分隔行组成部分?的主要内容,如果未能解决你的问题,请参考以下文章