Vishal Banerjee Ответов: 2

Как проверить наличие слова в текстовом файле построчно и при обнаружении распечатать всю строку целиком?


Чтобы проверить наличие слова в текстовом файле построчно и при обнаружении вывести всю строку, содержащую это слово .Мольбы помогают как можно быстрее.

Что я уже пробовал:

вот этот код:-
Здесь cw-указатель,в котором хранится строка, w-искомое слово, gw-также указатель, используемый для хранения слова, полученного из каждой строки.

в то время как (!o.eof())
{
о'.Гэтлину(Хо,'\п');
for(i=0;cw[i]!='\0';i++)
{
gw[i]=cw[i];
}
// if(cw[i]==w[i])
если(gw==w)
cout<<cw;
если(о. функция EOF())перерыв;
}
о'.рядом();

2 Ответов

Рейтинг:
8

Aydin Homay

Привет,

Я написал небольшую функцию на C++, чтобы решить вашу проблему. Пожалуйста, проверьте это и, если это сработало, нажмите эту маленькую зеленую кнопку, чтобы принять решение.

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

int main()
{
	std::cout << "Write the path of the file\n";
	std::string path;
	std::cin >> path;

	std::ifstream file(path.c_str());

	if (file.is_open())
	{
		std::cout << "File '" << path << "' opened.\n";

		std::cout << "Write the word you're searching for\n";
		std::string word;
		std::cin >> word;
		std::string line;

		std::string candidate;

		while (!file.eof()) // for each candidate word read from the file 
		{
			std::getline(file, line);
			std::size_t found = line.find(word);
			if (found != std::string::npos)
				std::cout << "The word '" << word << "' has been found in line " << line;
		}
		file.close();
	}

	else
	{
		std::cerr << "Error! File not found!\n";
		return 1;
	}
}


Если это не решило вашу проблему, то, пожалуйста, оставьте комментарий, и я помогу Вам улучшить свое решение, пока ваша проблема не будет решена.

Овации,
АХ


Vishal Banerjee

Извините, сэр, но я не могу понять этого решения.

Vishal Banerjee

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

Aydin Homay

Я написал код в Visual Studio, так что если вы откроете его там, он будет работать, иначе вам нужно будет заменить этот заголовок. Не могли бы вы сообщить мне, какой Редактор вы используете?

Vishal Banerjee

Сэр, пожалуйста, ответьте.

Vishal Banerjee

Сэр, я использую turbo c++, Dev c++ и code blocks 16.01 только pls, чтобы сделать код совместимым соответственно.

Aydin Homay

Удалить #include "stdafx.h"

Vishal Banerjee

Спасибо вам, сэр, за ваш ответ, код теперь работает, но я не получаю формат ввода "пути" на выходном экране. Пожалуйста помочь.

Vishal Banerjee

Сэр, проблема была решена, большое вам спасибо.

Aydin Homay

Хорошо, хорошо слышать, что просто, Пожалуйста, не забудьте нажать эту зеленую кнопку Принять ;-) это поможет другим легко найти решение

Vishal Banerjee

Сэр у меня есть сомнения относительно кодекса:-
Я не понимаю смысла ""std::string candidate;""
пожалуйста объяснить.

Vishal Banerjee

Сэр,
Я нашел серьезную проблему в этом коде, поэтому сейчас я отвергаю решение, но как только оно будет решено, я скоро приму его.
Проблема в том, что когда я ищу слово, подобное "кошке", такие слова, как "катаракта", и все другие слова, начинающиеся с "кошки", также приходят в качестве вывода. Пожалуйста, решите это.

Рейтинг:
0

CPallini

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

int main()
{
  ifstream ifs("in.txt");

  string word = "foo";
  string line;

  while( getline(ifs, line ))
  {
    size_t pos = line.find(word);
    if ( pos != string::npos)
      cout << line << endl;
  }
}


[обновление]
Если вы не хотите foofighters, то есть если вам нужно искать свое слово между словесными границами (как намекнули вы сами и Карстенк) тогда вы можете использовать регулярное выражение:
#include <iostream>
#include <fstream>
#include <regex>
using namespace std;

int main ()
{
  ifstream ifs("in.txt");

  string word = "foo";

  std::regex e{"\\b" + word + "\\b"};

  string line;

  while( getline(ifs, line ))
  {
    if ( regex_search( line, e) )
      cout << line << endl;
  }
}

[/обновление]


KarstenK

Код может иметь некоторые недостатки, например, при поиске "foo" и сопоставлении с maysterious "foofigthers" ;-)

CPallini

Я осознаю это. На самом деле, это по замыслу, вы знаете, это особенность. :-D

Vishal Banerjee

Большое вам спасибо за помощь и поддержку кода, но я хочу упомянуть здесь, что я не могу проверить этот код, так как мой компилятор не поддерживает эту функцию.

CPallini

Очевидно, вам нужен более современный компилятор.