2016-05-01 12 views
0

私は20語を含む文字列配列を持っています。私は配列から1つのランダムな単語を取る関数を作った。しかし、私はどのように私は配列からその言葉を返すことができるか知りたい。今私はvoid関数を使用して、私はchar型を使用していたが、それは動作しません。ここで少し助け?単語推測ゲームを作る必要があります。文字列関数の戻り値

CODE:

#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

あなたが投稿したコードがあなたが尋ねたものとどのように関係しているのか分かりません。 – StoryTeller

+2

'ベクトル'を使うか、配列にいくつの要素があるかを関数に伝えます。関数に20をハードコードしないでください。それはあなたの質問に接するものですが、関連する一般的なアドバイスです。関数が配列の大きさを知っていることを確認してください。 –

+1

文字列を返すのはどうですか? '' std :: string random(std :: string names []); ' – Galik

答えて

2

メイクrandom返信string。また、数値ジェネレータを一度シードするだけで済みます。配列から1つのランダムな単語だけを取得したいので、forループは必要ありません。

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

そして、main関数に、random関数の戻り値にstring変数を割り当てます。

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メイト、すべての作品が好きです。 – Maaverick

0

私は、文字列を持つスーパー慣れていないんだけど、あなただけの文字列関数として()ランダムを宣言することができるはずです。

例: 文字列random(文字列名[]);

1

さらに、srand(time(NULL))は、main()関数の先頭で1回だけ呼び出される必要があります。あなたの質問にだけでなく、前の回答で

+0

そして、あなたは現代のコードで 'srand()'を使うべきではありません。代わりに ''を探してください。 –

2

、あなたが名前の配列にアクセスする範囲外で実行されている:

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

を名前にアクセスされることはありません[0]が、名前に取り組む際の代わりに、配列の後ろに達します[20]。