如何逐行读取文件并分隔行组成部分?

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::ifstreamstd::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;
}

以上是关于如何逐行读取文件并分隔行组成部分?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 逐行读取文件,然后使用分隔符分割每一行

为啥你不能使用 cat 逐行读取文件,其中每行都有分隔符

在 Fortran 中逐行读取逗号分隔的文本文件

DELPHI中逐行读取并复制

python读取以非换行符分隔的超大文件,并逐行输出

如何使用Javascript读取本地文本文件并逐行读取?