Я пишу код, чтобы проверить, содержит ли один документ (text1.txt) список запрещенных слов (bannedwords.txt).Проверка наличия одного документа в другом C++
Например, в тексте text1 есть текст песни, и я хочу проверить, включено ли в него слово pig из запрещенного документа. Затем я хочу из положить быть похожей на:
"pig" found 0 times
"ant" found 3 times
Это то, что я придумал до сих пор, но не могу показаться, чтобы поместить массив запрещенных слов в поиске. Любая помощь будет удивительно: D
Благодаря Fitz
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
bool CheckWord(char* filename, char* search)
{
int offset;
string line;
ifstream Myfile;
Myfile.open(filename);
if (Myfile.is_open())
{
while (!Myfile.eof())
{
getline(Myfile, line);
if ((offset = line.find(search, 0)) != string::npos)
{
cout << "The Word " << search<< " was found" << endl;
return true;
}
else
{
cout << "Not found";
}
}
Myfile.close();
}
else
cout << "Unable to open this file." << endl;
return false;
}
int main()
{
ifstream file("banned.txt");
if (file.is_open())//file is opened
{
string bannedWords[8];//array is created
for (int i = 0; i < 8; ++i)
{
file >> bannedWords[i];
}
}
else //file could not be opened
{
cout << "File could not be opened." << endl;
}
ifstream text1;//file is opened
text1.open("text1.txt");
if (!text1)//if file could not be opened
{
cout << "Unable to open file" << endl;
}
CheckWord("text1.txt", "cat");
system("pause");
}
Нам нравятся четкие вопросы. Что означает «но не может показаться, что он помещает массив запрещенных слов в поиск»? Пожалуйста, дайте ясный пример некоторых коротких входных файлов и вывода, что не так, и что вы не понимаете, почему это происходит. –
Подсказки: 'push_back()' to 'std :: vector bannedWords;' вместо использования массива фиксированного размера и созданного 'bannedWords' вне конструкторов' if'/'for', иначе он оставит область и будет уничтожен, прежде чем вы захотите его использовать. Передайте его в «CheckWord» в качестве дополнительного параметра. После неустранимой ошибки вызовите 'exit (EXIT_FAILURE);' вместо того, чтобы печатать сообщение об ошибке и пытаться продолжить с плохими данными. Используйте 'while (getline (Myfile, line)' и не проверяйте 'while (... eof)'. –
есть ваш вопрос: «Как я могу изменить вызов CheckWord для передачи массива строк?». – Ian