我正在尝试找到一种方法,从二维字符数组中随机选择一个单词并将其放入另一个字符数组中。这是我的代码:
char wordbank[5][20] = {"house", "car", "tree", "bicycle", "shark"};
int random = rand() % 5;
char word[20] = wordbank[random];
我在最后一行收到一个编译器错误: 数组必须用大括号括起来的初始化器初始化。 这样做的正确方法是什么?
最佳答案
您遇到编译错误,因为您试图将一个 char* 分配给一个字符数组。
由于 wordbank 是一个二维数组,wordbank[index] 将是一个 char*(指向 char 的指针)。 C 和 C++ 没有从 char* 到 char 数组的隐式转换。因此你会得到一个编译错误。
如果你想在wordbank中复制一个随机字符串,可以这样做:
char wordbank[5][20] = {"house", "car", "tree", "bicycle", "shark"};
srand (time(NULL));
int random = rand() % 5;
char word[20];
strcpy(word, wordbank[random]); // strcpy (string copy) takes a copy of the 2nd string
// (i.e. wordbank[random]) and puts it into the 1st
// string (i.e. word).
如果你只是想指向wordbank中的一个随机字符串,可以这样做:
char wordbank[5][20] = {"house", "car", "tree", "bicycle", "shark"};
srand (time(NULL));
int random = rand() % 5;
char* word = wordbank[random]; // word is a pointer to a string. It is
// initialized to point to the string
// held by wordbank[random]
使用第一种方法,您可以在不更改 wordbank 值的情况下更改 word 的值。使用第二种方法,您将同时更改两者。
顺便说一句——使用 std::string 代替 C 风格的字符串,使用 vector 代替数组。如果您真的想要一个数组,请改用 C++ 样式。
类似于:
vector<string> wordbank; // Make a vector of strings to hold your wordbank
wordbank.push_back("house"); // Add words to wordbank one-by-one
wordbank.push_back("car"); // ...
wordbank.push_back("tree"); // ...
wordbank.push_back("bicycle"); // ...
wordbank.push_back("shark"); // ...
// or add all words at initialization - like:
//vector<string> wordbank {"house", "car", "tree", "bicycle", "shark"};
srand (time(NULL));
int random = rand() % wordbank.size();
string word = wordbank[random]; // Copy wordbank[random] into word
现在您可以直接将新词添加到词库中,而无需考虑它包含多少词以及每个词的长度。
关于c++ - 从 2d char 数组 c++ 将字符串分配给 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32271469/