Использование C++ для решения поиска слов.
Извините, что беспокою всех простым вопросом, но я очень новичок в C++, и я не знаю, что делать. Итак, мне дали фреймворк на C++, который читает в 2 текстовых файлах, содержащих поиск слова и список слов, которые можно найти, и представляет результаты в другом текстовом файле. Я пытаюсь завершить структуру, но я не могу понять, как именно программа проверит все 8 направлений или как система будет сравнивать слова в файле словаря с поиском слов и помещать любые совпадающие слова в файл results.txt. Я приложил структуру ниже, и любая информация или совет о том, как начать, будут высоко оценены.
dictionary.txt
ABSEIL
BIKE
PIXEL
RESIGHTS
YARDWORKS
wordsearch.txt
S T H G I S E R B
G K L L B X D I E
K P R H I M K L D
T G Y O L E X I P
B A P T W H T E J
T Q U D X D W S F
V M V S H L R B A
H Q L B C K S A Y
R D G B F J P Q Y
Wordsearch.h
#pragma once
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <Windows.h>
using namespace std;
class WordSearch
{
public:
WordSearch();
~WordSearch();
bool ReadPuzzle();
bool ReadDictionary();
bool SolvePuzzleWithDictionary();
void WriteResults(string fileName);
private:
LARGE_INTEGER start, end, frequency;
const int NUMBER_OF_RUNS;
const string PUZZLE_NAME;
const string DICTIONARY_NAME;
};
Wordsearch.cpp
#include "WordSearch.h"
#include <algorithm>
#include <iterator>
#include <iostream>
#include <iomanip>
using namespace std;
WordSearch::WordSearch() : NUMBER_OF_RUNS(500), PUZZLE_NAME("wordsearch_grid.txt"), DICTIONARY_NAME("dictionary.txt")
{
}
WordSearch::~WordSearch()
{
}
bool WordSearch::ReadPuzzle()
{
cout << endl << "ReadPuzzle() has NOT been implemented" << endl;
return true;
}
bool WordSearch::ReadDictionary()
{
cout << endl << "ReadDictionary() has NOT been implemented" << endl;
return true;
}
bool WordSearch::SolvePuzzleWithDictionary() {
cout << endl << "SolvePuzzleWithDictionary() has NOT been implemented" << endl;
double timeTakenInSeconds;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&start);
for (int n = 0; n < NUMBER_OF_RUNS; ++n) {
// Add solving code here!
}
QueryPerformanceCounter(&end);
timeTakenInSeconds = (end.QuadPart - start.QuadPart) / (double)(frequency.QuadPart*NUMBER_OF_RUNS);
cout << fixed << setprecision(10) << "SolvePuzzleWithDictionary() - " << timeTakenInSeconds << " seconds" << endl;
return false;
}
void WordSearch::WriteResults(string fileName) {
cout << "WriteResults() has NOT been implemented" << endl;
}
1 ответ
Возможно, вы захотите иметь массив приращений индекса для перемещения во всех направлениях (при условии, что вы сохраняете свое поле в матрице), чтобы вы могли написать общий код для проверки всех направлений:
const int dirIncr[][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}/*...*/}
Таким образом, вы перебираете все возможные начальные ячейки и от каждого поиска на продажу во всех возможных направлениях (и на каждом шаге вы должны проверять, соответствуют ли текущие координаты вашему массиву).
Что касается фактического поиска, здесь могут быть полезны деревья префиксов.