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++. Для соседних задач пригодятся эти разборы:
- Получить слово из текста C++: stringstream, позиция слова и поиск
- Как разбить слово на цифры и буквы в C++
- Как сделать все строки одинакового размера в C++: setw, пробелы и обрезка
- Факториал в C++: цикл, рекурсия и проверка переполнения