Рандомайзер слов в массиве
Нужно написать рандомайзер слов,который берет с клавиатуры 6 букв,записывает их в "алфавит" и потом делает рандомные слова,рандомной длины,используя буквы из "алфавита".Количество слов от 9 до 12.Пока добился того,что получается 1 рандомное слово и записывается в массив Slovaa
Сам код .
P.s.Выходит ошибка компилятора,тип многократное обращение к массиву.Также подчеркивает мое стремное условие и строчку Slovo[7] = { 0 },мол,массив имеет 7 байт,но может потребоваться 11,а в строчке,которую привел выше - массив имеет 7 байт,но может потребоваться 8.
P.S.S.Посоветуйте в каком направлении идти,скорее всего я тут уже полез далеко в дебри,но хотелось что-то похожее получить,только работающее:)Заранее спасибо
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <string>
#include "alphabet.h"
using namespace std;
void Alphabet(char* arr) //алфавит
{
cout << "Введите 6 букв вашего алфавита: " << endl;
for (int i = 0; i < 6; i++)
{
cin >> arr[i]; //Ввод букв для слов
}
}
int main(int argc, char* argv[])
{
setlocale(0, "RU");
srand(time(NULL));
char arr[6];
Alphabet(arr);
TextRewrite objTextRewrite; //заготовка под класс
string sentence[20]; //массив предложений,состоящий из слов
string Podlejashie[4]; //массив слов,которые будут ставиться в предложении на место подлежащего
string Skazuemoe[4]; //массив слов,которые будут ставиться в предложении на место сказуемого
string Glagol[4]; //массив слов,которые будут ставиться в предложении на место глагола
char Slovo[7]; //само слово,которое будет улетать в рандомный массив 1-3 слово,изначально хотел обнулять этот массив,чтобы
//использовать только 1 массив
int countOfWords = rand() % 3 + 9; // колличество слов в предложении
int count = -1; //счетчик слов,планировал с помощью него выйти из цикла,когда заполнится массив слов
for (int i = 0; i < countOfWords; i++) // цикл задачи слов
{
count++;
Slovo[i] = arr[rand() % 6 + 1]; //рандомная генерация слов из алфавита,но не понял,как играться с длиной слова,чтобы и она была рандомной
if (Slovo[countOfWords - 1] == arr[0] || Slovo[countOfWords - 1] == arr[1] || Slovo[countOfWords - 1] == arr[2] || Slovo[countOfWords - 1] == arr[3] || Slovo[countOfWords - 1] == arr[4] || Slovo[countOfWords - 1] == arr[5]) // просто ужасное условие,сам знаю,буду рад,если подскажите как исправить,проверяет на "готовность" слова,то бишь,до конца оно сгенерировалось или нет
{
Podlejashie[i] = Slovo; //собсна,само присваение массиву слов сгенерированного слова
Slovo[7] = { 0 }; //попытка обнулить массив,хотя сам не понимаю зачем уже это делал
}
if (count == countOfWords - 1) // тут выход из цикла,если массив слов заполняется
{
break;
}
}
//for (int i = 0; i < 6; i++) //тест вывода
// cout << Slovaa[i];
return 0;
}
Ответы (1 шт):
Как мне кажется, примерно то, что вы хотите:
string alphabet;
cin >> alphabet;
int wordsCount = 9 + rand()%4; // Случайное количество слов
for(int i = 0; i < wordsCount; ++i)
{
int wordLength = 5 + rand()%10; // Случайная длина слова
string word;
for(int j = 0; j < wordLength; ++j)
word += alphabet[rand()%alphabet.length()];
cout << word << endl;
}
Посмотрите, как работает - и можете переделать свой код. Конечно, по хорошему, нужно использовать в 2020 году <random>, но это вопрос второй :) Ну и понятно, что вместо вывода слов делаете с ними то, что вам нужно...
Пример работы - тут.