Как прочитать файл построчно и разделить строки компонентов? - PullRequest
0 голосов
/ 19 октября 2019

Я новичок в C ++ (я обычно использую Java) и пытаюсь создать k-ary кучу. Я хочу вставить значения из файла в кучу;однако, я в недоумении с кодом для вещей, которые я хочу сделать.

Я хотел использовать .nextLine и .hasNextLine, как в Java со сканером, но я не уверен, что они применимы к 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 голосов
/ 19 октября 2019

Посмотрите на различные реализации 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...