C++

Как получить слово из файла в C++: первое слово, все слова и проверка ошибок

Чтобы получить слово из файла в C++, используйте std::ifstream и оператор >>. Он читает данные до пробела, таба или перевода строки. Поэтому для первого слова код получается очень коротким

Подготовьте рядом с программой файл text.txt:

hello world from file

А затем прочитайте первое слово:

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

int main() {
    std::ifstream file("text.txt");
    std::string word;

    if (!file) {
        std::cout << "Не удалось открыть файл\n";
        return 1;
    }

    file >> word;

    std::cout << "Первое слово: " << word << "\n";
    return 0;
}

Вывод:

Первое слово: hello

Почему оператор >> читает только слово

Оператор >> для строки читает символы до первого разделителя. Разделителем считается пробел, перенос строки или табуляция

Если файл такой:

red green blue

то первый вызов:

file >> word;

положит в word значение:

red

Для чтения всей строки нужен не >>, а std::getline

Как прочитать все слова из файла

Если нужно не первое слово, а все слова по очереди, используйте цикл:

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

int main() {
    std::ifstream file("text.txt");
    std::string word;

    if (!file) {
        std::cout << "Файл не открылся\n";
        return 1;
    }

    while (file >> word) {
        std::cout << word << "\n";
    }

    return 0;
}

Для файла:

hello world from file

результат будет:

hello
world
from
file

Как прочитать первое слово из первой строки

Если нужно сначала взять строку, а потом из нее первое слово, можно использовать std::istringstream:

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

int main() {
    std::ifstream file("text.txt");
    std::string line;
    std::string firstWord;

    if (!std::getline(file, line)) {
        std::cout << "Не удалось прочитать строку\n";
        return 1;
    }

    std::istringstream stream(line);
    stream >> firstWord;

    std::cout << firstWord << "\n";
    return 0;
}

Этот вариант удобен, когда в строке дальше есть данные, которые нужно разбирать отдельно

Частые ошибки

Файл лежит не там

Программа ищет text.txt в рабочей папке запуска, а не обязательно рядом с исходником. Если запускаете из VS Code, рабочая папка обычно совпадает с открытой папкой проекта. Если запускаете из другой директории, путь может отличаться

Для проверки можно временно указать полный путь, но в учебных проектах лучше держать файл рядом с запускаемой программой

Если не понимаете, откуда программа ищет файл, временно выведите рабочую директорию средствами вашей IDE или запустите программу из терминала в нужной папке. Так проще отличить ошибку пути от ошибки чтения файла

Не проверять открытие файла

Если написать сразу:

file >> word;

и не проверить if (!file), вы не поймете, файл пустой или он вообще не открылся

Ждать, что >> прочитает строку с пробелами

Для строки целиком используйте:

std::getline(file, line);

Для одного слова:

file >> word;

Мини-задание

Создайте файл names.txt:

Anna Boris C++ Dina

Напишите программу, которая выводит каждое слово с номером:

1: Anna
2: Boris
3: C++
4: Dina

Подсказка: заведите счетчик int index = 1; и увеличивайте его внутри цикла

Что почитать дальше по C++

Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x