функция toString из 2D-массива - PullRequest
       15

функция toString из 2D-массива

0 голосов
/ 08 октября 2019

Очень жаль, если это слишком долго - я вчера отправил вопрос об игровой программе, которую пытаюсь написать, и с помощью некоторых людей мне удалось довольно быстро все выяснить.

Очень большая часть программы завершена, но у меня есть еще одна странная задача. У меня есть функция printGrid, которая печатает один случайный элемент из каждых 16 групп символов из массива char. Например (это очень уродливо - извините, пожалуйста, мой код новичка):

        char gameZero[outer_size][inner_size] = {
    {'A','A','C','I','O','T'}, {'A','H','M','O','R','S'},  

    {'E','G','K','L','U','Y'}, {'A','B','I','L','T','Y'}, {'A','C','D','E','M','P'},   
     {'E','G','I','N','T','V'}, {'G','I','L','R','U','W'}, {'E','L','P','S','T','U'},  
     {'D','E','N','O','S','W'}, {'A','C','E','L','R','S'}, {'A','B','J','M','O','Q'},  
     {'E','E','F','H','I','Y'}, {'E','H','I','N','P','S'}, {'D','K','N','O','T','U'},  
 {'A','D','E','N','V','Z'}, {'B','I','F','O','R','X'}  
     };  
    void printGrid() {
mt19937 gen(time(nullptr));
uniform_int_distribution<int> random_inner(0, inner_size - 1);
int n = random_inner(gen);

cout << "+---+---+---+---+\n";
for (int i = 0; i < 4; i++)
    cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";
for (int i = 4; i < 8; i++)
    cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";
for (int i = 8; i < 12; i++)
    cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";
for (int i = 12; i < 16; i++)
    cout << "| " << gameZero[i][n] << " ";
cout << "\n+---+---+---+---+\n";

}

Это напечатает игровую доску 4x4 для просмотра пользователем. Сейчас я пытаюсь написать что-то вроде функции toString, которая берет случайные числа, сгенерированные в printGrid, и выводит их в виде одной строки без пробелов. Проблема, которую я пытаюсь обернуть, заключается в том, что у меня есть набор персонажей, который меняется каждый раз, когда игрок начинает новую игру. Эти 16 символов происходят из набора из 16 кубиков, каждый из которых содержит 6 символов. Является ли единственный способ сделать возможным сохранение этих новых случайно выбранных символов в пустом массиве, чтобы пользователь мог просто распечатать их с помощью функции toString при желании? Еще одно препятствие, с которым мне придется столкнуться, - это удаление массива каждый раз, когда пользователь хочет начать заново. Если это так, могу ли я сохранить их в векторе и использовать что-то вроде vector :: clear, чтобы решить это?

Текущий вывод функции printGrid:

 +---+---+---+---+
 | T | M | E | L |
 +---+---+---+---+
 | A | V | L | S |
 +---+---+---+---+
 | E | A | Qu| F |
 +---+---+---+---+
 | E | D | N | O |
 +---+---+---+---+

Желаемый вывод функции toString Я хотел бы создать:

 TMELAVLSEAQuFEDNO

Очень жаль, если это слишком много для чтенияили слишком запутанно - я работаю над этим почти весь день, и мой мозг сейчас немного жарен. Любые советы с благодарностью!

1 Ответ

0 голосов
/ 08 октября 2019

У вас есть логика для выбора символов, например:

for (int i = 0; i < 4; i++)
    cout << "| " << gameZero[i][n] << " ";

Вы можете использовать std::string и оператор += для добавления символов в строку:
std :: string all_letters;

for (int i = 0; i < 4; ++i)
{
  all_letters += gameZero[i][n];
}

Редактировать 1: Расширение цикла
Поскольку вам не нужно печатать по строкам, вы можете выполнять итерацию по всему массиву:

std::string all_letters;

for (int i = 0; i < 16; ++i)
{
    all_letters += gameZero[i][n];
}
...