2016-05-01 3 views
0

У меня есть массив строк, содержащий 20 слов. Я создал функцию, которая принимает одно случайное слово из массива. Но я хочу знать, как я могу вернуть это слово из массива. Прямо сейчас я использую функцию void, я использовал тип char, но он не будет работать. Немного помочь здесь? Нужно сделать игру с угадыванием слов.Возвращаемое значение из строковой функции

КОД:

#include <iostream> 
#include <time.h> 
#include <cstdlib> 
#include <stdlib.h> 
#include <algorithm>///lai izmantotu random shuffle funckiju 
#include <string> 
using namespace std; 


void random(string names[]); 


int main() { 
    char a; 
    string names[] = {"vergs", "rokas", "metrs", "zebra", "uguns", "tiesa", "bumba", 
         "kakls", "kalns", "skola", "siers", "svari", "lelle", "cimdi", 
         "saule", "parks", "svece", "diegs", "migla", "virve"}; 

random(names); 

     cout<<"VARDU MINESANAS SPELE"<<endl; 
     cin>>a; 







return 0; 
} 

void random(string names[]){ 
    int randNum; 
for (int i = 0; i < 20; i++) { /// makes this program iterate 20 times; giving you 20 random names. 
srand(time(NULL)); /// seed for the random number generator. 
randNum = rand() % 20 + 1; /// gets a random number between 1, and 20. 
names[i] = names[randNum]; 
} 
//for (int i = 0; i < 1; i++) { 
//cout << names[i] << endl; /// outputs one name. 
//} 

} 
+1

Я не вижу, как код, который вы опубликовали, относится к тому, что вы просите (что еще не так ясно, TBH). – StoryTeller

+2

Либо используйте 'vector ' или сообщите функции, сколько элементов в массиве. Не вставляйте в код функцию hard-code 20. Это касательно вашего вопроса, но соответствующие общие советы. Убедитесь, что функции знают, как большой массив, с которым они имеют дело. –

+1

Как насчет возврата строки? 'std :: string random (std :: string names []);' – Galik

ответ

2

random возвращение string. Вам также нужно только засевать генератор чисел. Поскольку вы хотите получить только одно случайное слово из массива, вам не нужен цикл for.

string random(string names[]){ 
    int randNum = 0; 
    randNum = rand() % 20 + 1; 
    return names[randNum]; 
} 

Затем в функции main, назначить string переменную возвращаемое значение функции random.

int main() { 
    srand(time(NULL)); // seed number generator once 
    char a; 
    string names[] = {"vergs", "rokas", "metrs", "zebra", "uguns", "tiesa", "bumba", 
         "kakls", "kalns", "skola", "siers", "svari", "lelle", "cimdi", 
         "saule", "parks", "svece", "diegs", "migla", "virve"}; 

    string randomWord = random(names); 

    cout<<"VARDU MINESANAS SPELE"<<endl; 
    cin>>a; 

    return 0; 
} 
+0

Tnx mate, все работает как должно. – Maaverick

0

Я не супер знакомы со строками, но вы должны быть в состоянии просто объявить случайным() как функцию строки.

Исход: Строка случайная (имена строк []);

1

Дополнительно srand (time (NULL)) следует называть только один раз в начале функции main().

+0

И вы не должны использовать 'srand()' в современном коде. Вместо этого посмотрите на ''. –

2

В вашем вопросе, а также в предыдущем ответе, вы работаете вне границ доступа массива имен:

int randNum = rand() % 20 + 1; 
return names[randNum]; 

Вы никогда не доступ имен [0], но вместо того, чтобы достичь за массивом при рассмотрении имен [20].

Смежные вопросы