#c
Вопрос:
/* Я написал код для простого палача на основе данных инструкций, я просто хочу знать, как обнаружить дублированные входные данные. Для этого кода он определяет только правильные буквы и длину
Например:
ввод пользователя: ХЭМ Х А А ПАЛАЧ! */
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
// Word to be guessed can be assumed to be at most 20 characters long (including end-of-string null character)
char HangmanWord[20];
// Variable to store current guess
char GuessLetter;
int count = 0;
std::cin >> HangmanWord;
//char guessedletter[strlen(HangmanWord)];
//int j = 0;
bool valid = true;
// Check that input word only consists of uppercase English letters
for (int i = 0; i < strlen(HangmanWord); i )
{
if ((HangmanWord[i] > 'Z') || (HangmanWord[i] < 'A'))
{
valid = false;
break;
}
}
while (valid == true)
{
std::cin >> GuessLetter; //Takes the Guess letter
if ((GuessLetter > 'Z') || (GuessLetter < 'A')) //Check that guessed letter is uppercase
{
break;
}
else
{
for (int i = 0; i < strlen(HangmanWord); i ) //loop to check every letter in word
{
if (GuessLetter == HangmanWord[i]) { //if the letter is equal to any letter in the word the count increases
count ;
break;
}
if (i == strlen(HangmanWord) - 1) { //If no letter is equal to any letter in the word the program exits
valid = false;
}
}
if (count == strlen(HangmanWord)) { //Checks if all letters were guessed and exits the loop after
valid = false;
}
}
}
if (count == strlen(HangmanWord)) { //Checks if all letters were guessed correct to print Hangman
cout << "HANGMAN!n";
valid = false;
}
Комментарии:
1. Поиск std::set, может быть, в нем есть то, что вам нужно
Ответ №1:
Если вы хотите определить, была ли уже введена буква, вы можете работать с символами ASCII, представленными цифрами. Предполагая, что мы ограничиваемся прописными буквами, 'A'
равно 65, а «Z» равно 90.
Мы можем посчитать с их помощью. 'A' - 'A'
есть 0
и 'C' - 'A'
есть 2
.
Мы также знаем, что массивы индексируются, начиная с нуля.
Мы можем собрать эти вещи вместе, чтобы создать массив логических значений, и пометить их как буквы, которые угадываются.
std::array<std::bool, 26> already_guessed;
std::fill(already_guess.begin(), already_guessed.end(), false);
И затем мы можем проверить, угадана ли буква, посмотрев ее. Рассмотрим, например, проверку того, было ли 'D'
угадано. Они должны начинаться с ложного, так как в начале ничего не было угадано.
already_guessed['D' - 'A']
Если это не так, мы можем отметить это как предположение:
already_guessed['D' - 'A'] = true