Рейтинг:
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
Очевидно, вам нужен более современный компилятор.