0

Имеется текстовый файл in.txt. Требуется вывести на экран строки файла, начинающиеся с заданного слова. Слово задается вводом с клавиатуры. Считываю файл построчно в цикле, не могу сообразить как из buff вытащить первое слово, чтобы сравнить с введенным.

#include <iostream>
#include <fstream>
using namespace std;

int main() { char word[20]; cin.getline(word, 20); ofstream fout; fout.open("in.txt"); fout << "Today it's raining. " << endl; fout << "Yesterday it was raining. "<< endl; fout << "Today it's cold. "<< endl; fout << "Tomorrow will be no rain Today. "<< endl; fout << "Today it's windy. "<< endl; fout << "Today it's sunny. "<< endl; FILE * ptrFile = fopen("in.txt", "rb"); char buff[50]; ifstream fin; fin.open("in.txt"); while(!feof(ptrFile)){ fin.getline(buff, 50); if()// условие вывода строки cout << buff;

}
return 0;

}

  • Циклом проходитесь по введенному слову и по buff и проверяете символы на соответствие. Если символы не равны значит строка уже не подходит можете её пропустить, если вы прошли по всему введенному слову, то строка подходит и вы её можете вывести. Если вам именно слово проверить нужно, а не последовательность, то можете не учитывать регистр и пропустить в buff возможные пробелы. – Павел Ериков stand with Russia May 07 '21 at 11:12
  • @ПавелЕриков, спасибо, а без цикла в цикле никак? –  May 07 '21 at 11:13
  • Чтобы найти слово, надо определиться, что это такое :) Я, кстати, не шучу. И еще - while(!feof(ptrFile)){ - эта ошибка уже надоела... – Harry May 07 '21 at 11:15
  • @HelenFrost можете использовать вместо массива char тип string и у него функцию find. – Павел Ериков stand with Russia May 07 '21 at 11:18
  • @ПавелЕриков большое спасибо за помощь :) –  May 07 '21 at 11:19
  • @Harry большое спасибо за подсказку –  May 07 '21 at 11:20

1 Answers1

1

Для этого есть starts_with (с++20 я думаю в 2021 году у вас современный компилятор)

Я бы предложил сделать так:

  1. чиатем файл по строчно через std::getline
  2. првоеряем через starts_with что строка начинается с паттерна

Вот пример кода

#include <string>
#include <iostream>
#include <fstream>
#include <filesystem>
#include <cassert>

int main() { std::string pattern{"Hello"}; std::filesystem::path pth{std::filesystem::current_path() / "data"}; std::ifstream ifs{pth, std::ios::in }; assert(ifs.is_open() && "Error open file");

for (std::string l; std::getline(ifs, l); ) { if (l.starts_with(pattern)) { std::cout << "Match! " << l << std::endl; } }

return 0; }