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

标签 c++ arrays

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

    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/

相关文章:

c++ - 惰性构造 - 虚拟方法与 if-then stub setter/getter

javascript - Symfony3 - 未定义索引(解码 JSON->对象->数组)

Python-通过循环将多个数据插入到多个数组中

c++ - 如何在 visual studio 2010 中使用 "activate"c++11 标准?

c++ - 在 C++ 的 python 类中指定静态变量

c++ - 等号对大括号初始化有影响吗?例如。 'T a = {}' 与 'T a{}'

c++ - SDL 和 Visual Studio 2010 资源

JQuery 基于 DOM 值对 DOM 对象数组进行排序

c++ - 在编译时确保 C++ 数组参数大小

php - 如何将 PHP 中的 session 数组变量存储在 MySQL 数据库中?