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

时间:2019-10-18 22:25:12

标签: c++ file heap

我是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; 
}

结果应仅将数字添加到堆中或提取最小值。

1 个答案:

答案 0 :(得分:0)

查看各种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;
}