Сложность сравнения двух массивов

0
#include<iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
char wordOne[5][9] = { {"elephant"},
                       {"imperial"},
                       {"absolute"},
                       {"absinthe"},
                       {"computer"} };

char hangman[9] = {"********"};

char guess;

int r;
srand( time(0));
r = rand()%5;
wordOne[r];

cout << "Guess the secret eight letter word before you run out of guesses! Go: " << endl;

for (int x = 0; x < 8; ++x)

cout << hangman[x] << endl;
cin >> guess;

while (hangman[0] == '*' || hangman[1] == '*' || hangman[2] == '*' || hangman[3] == '*' || hangman[4] == '*' || hangman[5] == '*' || hangman[6] == '*' || hangman[7] == '*')

{
cout << "Guess the secret eight letter word before you run out of guesses! Go: ";
for(int x = 0; x < 8; ++x)
        cout << hangman[x];
        cout << endl;
        cin >> guess;

    for(int x = 0; x < 8; ++x)
    {
        if (wordOne[hangman[x]][x] == guess)
            {
                hangman[x] = guess;
            }
    }

for(int x = 0; x < 8; ++x)
    cout << hangman[x] << endl;
}

system("PAUSE");
return 0;
}

Для проекта нам было предложено создать одномерный массив, который отображает только звездочки. Затем, используя двумерный массив, сохраните 5 разных 8-буквенных слов. Предполагается, что программа выбирает один случайным образом, а затем пользователь вводит случайные буквы, пытаясь угадать слово. Это по существу репликация палача. Как предполагают письма, звездочка должна быть заменена правильной буквой. Например, если слово было слоном, и сначала было угадано, программа затем отобразила e *** и так далее. Я получил программу для компиляции, но я не могу понять, как изменить код, чтобы заменить звездочки и программа работает правильно. Любая обратная связь будет высоко оценена.

  • 2
    wordOne[hangman[x]][x] скажем, x = 1 в коде это будет равнозначно wordOne['*'][1] . wordOne[r][x] == guess это не должно быть wordOne[r][x] == guess ? Кроме того, у вас должен быть массив уже угаданных букв для проверки, чтобы пользователь не мог просто продолжать вводить уже угаданные буквы.
  • 0
    if (wordOne[hangman]... , if (wordOne[hangman]... выглядит неправильно. Попробуйте if (wordOne[r][x] == guess) .
Теги:
arrays

2 ответа

3

wordOne[hangman[x]][x] let say x = 1 это будет wordOne['*'][1] в коде wordOne['*'][1]. wordOne[r][x] == guess это не должно быть wordOne[r][x] == guess? Я добавил int чтобы отслеживать количество догадок и добавил проверку в цикле while, чтобы узнать, угадал ли пользователь максимальное количество раз.

#include<iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
    char wordOne[5][9] = { {"elephant"},
    {"imperial"},
    {"absolute"},
    {"absinthe"},
    {"computer"} };

    char hangman[9] = {"********"};

    char guess;

    int r;
    srand( time(0));
    r = rand()%5;
    wordOne[r];
    int numGuesses = 10;

    cout << "Guess the secret eight letter word before you run out of guesses! Go: " << endl;

    for (int x = 0; x < 8; ++x)
        {
        cout << hangman[x] << endl;
    }
    while (numGuesses > 0 && (hangman[0] == '*' || hangman[1] == '*' || hangman[2] == '*' || hangman[3] == '*' || hangman[4] == '*' || hangman[5] == '*' || hangman[6] == '*' || hangman[7] == '*'))

    {
        cout << "Guess the secret eight letter word before you run out of guesses! Go: ";


        for(int x = 0; x < 8; ++x)
        {
            cout << hangman[x];
        }

        cout << endl;

        cin >> guess;
        --numGuesses;

        for(int x = 0; x < 8; ++x)
         {
            if (wordOne[r][x] == guess)
            {
                hangman[x] = guess;
            }
        }

        for(int x = 0; x < 8; ++x)
        {
            cout << hangman[x] << endl;
        }
    }

    system("PAUSE");
    return 0;
}
  • 0
    Вы улучшили код, но в чем была проблема в коде OP и что вы сделали для его решения?
  • 0
    @CaptainObvlious о да, я забыл добавить свой комментарий от вопроса ОП к моему ответу.
2

Измените wordOne[hangman[x]][x] на wordOne[r][x]. Кроме того, я бы рекомендовал не печатать endl in for loop, поскольку он печатает каждый символ в другой строке.

  • 0
    Спасибо вам большое! Я не могу поверить, насколько это было просто. Ты восхитителен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню