Напишите функцию, которая случайным образом выбирает строку из массива в C ++ - PullRequest
0 голосов
/ 25 июня 2018

Я нахожусь в начинающем классе программирования C ++, и в настоящее время мы изучаем классы и конструкторы.Я застрял в задании, где мы должны написать функцию для случайного выбора цвета из нашего цветового массива.Ниже то, что я имею до сих пор.Я думаю, что я близко, но я получаю ошибку компилятора и не знаю, как ее исправить.

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

class ColorClass {
    public:
        ColorClass() {
            setColors();
        }
        void setColors() {
            colors[7] = {"Red, Orange, Yellow, Green, Blue, Purple, Indigo"};
        }
        const std::string getColors() {
            return colors[7];
        }
        std::string randomizeColor() {
            cout << "the colors are: " << colors;
            string word = colors[rand() % 7];
            cout << "word is :" << word;
            return word;
        }
    private:
        std::string colors[7];
};

int main() {
    srand (time(NULL)); //initialize the random seed
    ColorClass colorClass;
    colorClass.setColors();
    cout << colorClass.getColors() << endl;
    cout << colorClass.randomizeColor() << endl;

    colorClass.requirement();

    return 0;
}

Ошибка компилятора что-то вроде

нет жизнеспособного преобразования из std:: __ 1 :: basic_string ... std :: _ 1 :: allocator

(слишком долго, чтобы напечатать, но надеясь, что кто-то понимает это на первый взгляд).

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Я тоже новичок, но что я вижу, если вы не можете разделить строку% 7

string word = x[rand() % 7];

, попробуйте заменить строку

, возможно, я ошибаюсь: P

0 голосов
/ 26 июня 2018

Ваш код может выглядеть следующим образом:

class ColorClass
{
    public:
        const std::vector<std::string>& getColors()  const { return colors; }

        void print() const {
            std::cout << "the colors are:\n";
            for (const auto& color : colors) {
                std::cout << color << std::endl;   
            }

        }

        const std::string& randomizeColor() const {
            return colors[rand() % colors.size()];
        }
    private:
        std::vector<std::string> colors = {"Red", "Orange", "Yellow", "Green", "Blue", "Purple", "Indigo"};
};

int main() {
    srand (time(NULL)); //initialize the random seed

    ColorClass colorClass;
    colorClass.print();
    std::cout << "random pick:\n";
    for (int i = 0; i != 5; ++i) {
        std::cout << colorClass.randomizeColor() << std::endl;
    }
}

Демонстрация

В идеале srand / rand следует заменить новыми возможностями из <random>.

0 голосов
/ 25 июня 2018

x[rand() % 7] имеет тип char, и вы пытаетесь инициализировать строку с ним.

Если это действительно то, что вы хотите сделать, то используйте этот конструктор для построения строки из одного символа:

string(1, x[rand() % 7])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...