Перегружен оператор в то время как l oop или что-то еще? C ++ Начинающий здесь - PullRequest
1 голос
/ 25 апреля 2020

Я следую за книгой OOP в C ++ Брюса Экеля. Я на второй главе упражнения. Упомянутое упражнение задает следующее

«Создать программу, которая подсчитывает вхождение определенного слова в файл» *

Существует несколько способов достижения этой цели, например создание вспомогательной функции, которая читает содержимое файла в строку. Я сделал это с помощью метода l oop и строки find . Тем не менее, предложенные решения из книги дали довольно элегантное решение, которое я не понимаю. Полное раскрытие: я не зачислен ни в один класс. Я делаю это для моего собственного понимания:)

/**
Create a program that counts the occurrence of a particular word in a file
(use the string class’ operator ‘==’ to find the word).
**/

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {

    int counter = 0;
    string key;

    cout << "Please enter the word for search: ";
    cin >> key;

    ifstream inputFile("04.txt");
    string buf;

    while (inputFile >> buf) {

        if (key == buf)
            ++counter;
    }

    cout << "Word " << key << " occurs " << counter << " time(s)." << endl;


return 0;
}

Чего я не понимаю, так это пока l oop.

    while (inputFile >> buf) {

        if (key == buf)
            ++counter;
    }

Сначала программа запрашивает у пользователя ввод для поиска, затем открывает txt-файл, используя fstream, а затем создает строку с именем buf. Пока все хорошо, но я вообще не понимаю пока (inputFile >> buf). Из документации я понял, что это либо перегруженный оператор, либо , этот оператор наследуется от istream . Тем не менее, я просто догадываюсь сейчас.

Может кто-нибудь объяснить, что происходит в то время, пока я oop? Что значит while (inputFile >> buf)? C ++ новичок здесь, пожалуйста, будьте добры.

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Я думаю, что ответ Эндера не очень полезен, поэтому позвольте мне предоставить вам это это . Это из string's operator>> официальной документации и там говорится, что:

Обратите внимание, что операции извлечения istream используют пробелы в качестве разделителей; Следовательно, эта операция будет извлекать только то, что можно считать словом из потока.

Так что, пока вы пытались увидеть istream operator>>, в вашем примере кода string's operator>> фактически был выполнен.

Чтобы подвести итог, оператор >> читает из входного потока слово за словом (разделенные пробелом), и он возвращает true, если что-то было прочитано оттуда.

0 голосов
/ 25 апреля 2020

Поскольку inputFile - это istream, он берет входные данные из файла и помещает их в buf. Кроме того, если у вас есть genericIstream >> str, он вернет логическое значение, указывающее, является ли genericIstream пустым. В этом случае, пока l oop продолжается, пока не будет прочитан весь файл.

...