Это код для решения настольной игры Boggle с использованием рекурсии. После того, как я нахожу все слова в словаре, когда я проверяю размер вектора, к которому я добавляю слова, найдено правильное количество слов, но потом, когда я получаю доступ к вектору вне функции, я получаю, что размер вектора равен нулю. Я отправил адрес вектора, используя&”Но кажется, что даже тогда вектор не обновляется вне функции.
Вот код для моей функции wordCheck, куда я отправляю копию головоломки, строку, столбец и пустую строку с именем finalWord. Как вы можете видеть, я отслеживаю размер вектора при добавлении слов, однако, как только функция прошла все возможные слова, которые могут быть сформированы с первой буквой, являющейся буквой в r, c размер вектора правильный но как только я пытаюсь получить доступ к нему вне цикла, как в computerPlay (), размер возвращается к 0, и в конце ничего не печатается. В этом примере я просто тестирую первую позицию (0,0). Я также скопировал код для computerPlay ().
void Boggle::computerPlay(){
//copy of boggle board
char boggleCopy[SET_ROWS][SET_COLUMNS];
vector<string> computerWords;
for (int i = 0; i < SET_ROWS; i++) {
for (int j = 0; j < SET_COLUMNS; j++) {
boggleCopy[i][j] = theBoard[i][j];
}
}
string finalWord;
wordCheck(boggleCopy, 0, 0, finalWord, computerWords);// here the vector size printed is Zero when in fact it should be 7 like it is inside the loop
cout << "Vector size is " << computerWords.size() << endl;
for (vector<string>::iterator i = computerWords.begin(); i != computerWords.end(); i++){
cout << *i << endl;
}
}void Boggle::wordCheck(char puzzle[SET_ROWS][SET_COLUMNS], int r, int c, string finalWord, vector<string>& v){
char letter = puzzle[r][c];
finalWord = finalWord + letter;
puzzle[r][c] = ' ';
if (finalWord.length() > 2){
if(dictionary.binarySearch(finalWord)){
v.push_back(finalWord);
cout << v.size() << " is the size" << endl;
}
}
for(int dr = -1 ; dr <= 1 ; dr++ ){
for(int dc = -1 ; dc <= 1 ; dc++){
if (dr != 0 || dc != 0){
if(finalWord.length() <= maxLength){
if (!outOfBounds(r + dr, c + dc) && !(puzzle [r + dr][c + dc] == ' ')){
if (finalWord.length() == 3){
if(!(dictionary.isPrefix(finalWord))){
break;
}
}
wordCheck(puzzle, r + dr, c + dc, finalWord, computerWords);
}
}
}
}
}
puzzle[r][c] = finalWord.at(finalWord.length() - 1);
int size = v.size();
cout << "Last vector size is " << size << endl;
// here my code prints out 7 as the size of the vector, which is the correct size that the vector should be.
cout << "Last vector size is " << computerWords.size() << endl;
}
vector<string> computerWords;
является локальной переменной computerPlay
функция. Он больше не существует, когда эта функция завершается, и его имя не отображается за пределами функции.
Если ваш код в wordCheck
компилирует, это означает, что у вас есть другой вектор (также называется computerWords
) где-то еще в вашем коде.
Возможно, вы хотели не иметь этот другой вектор, и для wordCheck
функция для использования параметра v
скорее, чем computerWords
,
Других решений пока нет …