gpt4 book ai didi

c++ - 从 2d char 数组 c++ 将字符串分配给 char 数组

转载 作者:行者123 更新时间:2023-11-28 00:12:30 25 4
gpt4 key购买 nike

我正在尝试找到一种方法,从二维字符数组中随机选择一个单词并将其放入另一个字符数组中。这是我的代码:

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com