在 C++ 中初始化一个 const 多维数组
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1662737/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
initializing a const multidimensional array in c++
提问by barry
I'm currently working through some exercises in a c++ book, which uses text based games as its teaching tool. The exercise I am stuck on involves getting the pc to select a word from a const array of words (strings), mixing the letters up and asking the player to guess the word. This was easy, but as a follow on the book asks to add the option to provide a hint to the player to help them guess, firstly as a parallel array (again, no problem) and then as a 2 dimensional array. This is where I'm stuck. My (shortened) array of words is as follows:
我目前正在一本 C++ 书中完成一些练习,该书使用基于文本的游戏作为其教学工具。我坚持的练习涉及让电脑从一个常量的单词(字符串)数组中选择一个单词,混合字母并让玩家猜测这个单词。这很容易,但作为本书的后续要求添加选项以向玩家提供提示以帮助他们猜测,首先作为平行阵列(再次,没问题),然后作为二维阵列。这就是我被困的地方。我的(缩短的)单词数组如下:
const string WORDS[NUM_WORDS] = {"wall", "glasses"};
I need to provide a hint for each of these words but not sure how to go about it. Posting this from phone so extensive googling is not an option!
我需要为这些词中的每一个提供提示,但不确定如何去做。通过电话发布此内容,因此无法进行广泛的谷歌搜索!
My parallel array was as follows:
我的并行阵列如下:
const string HINTS[NUM_WORDS] = "brick...", "worn on head"};
Just need to combine the two.
只需要将两者结合起来。
Thanks in advance, Barry
提前致谢,巴里
回答by user200632
you could make 2d array?
你可以制作二维数组吗?
string aArray[][2] = {{"wall", "brick..."},
{"glasses", "corrective eye tool thingymajig"},
{"calculator", "number cruncher"}};
not sure if the syntax is right but i hope you get the concept.
不确定语法是否正确,但我希望你明白这个概念。
it's an array inside another array.
它是另一个数组中的一个数组。
EDITED: i removed the NUM_WORDS from the first square bracket. you can't declare multi dimentional array from variables.. sorry i forgot about that. i just tested it and it works.
编辑:我从第一个方括号中删除了 NUM_WORDS。你不能从变量声明多维数组..抱歉我忘记了。我刚刚测试了它并且它有效。
回答by Graham
Use a struct array:
使用结构数组:
typedef struct
{
string Word;
string Hint;
}
WORDDEF;
const WORDDEF WordList[] =
{
{"wall", "brick..."},
{"glasses", "worn on head"},
...
};
Then you refer to them as:
然后你将它们称为:
printf ("For entry %d, Word is %s, Hint is %s\n", 1, WordList[1].Word, WordList[1].Hint);
回答by f0b0s
huh... maybe you should use pair struct?
嗯...也许你应该使用pair struct?
std::pair<std::string, std::string> WORDS[10] = { make_pair("wall", "brick"),
make_pair("glasses, worn") }
now, you can use WORDS[i].first -- as the unknown word
现在,您可以使用 WORDS[i].first -- 作为未知词
and WORDS[i].second as its hint.
和 WORDS[i].second 作为它的提示。
回答by ChadNC
Here is a simple example That will give you a 2 dimensional array[2][2] from the other two arrays that you already have that you can use as a starting point.
这是一个简单的示例,它将从您已经拥有的其他两个数组中为您提供一个二维数组 [2][2],您可以将其用作起点。
#include "stdafx.h"
#include "iostream"
#include "string"
#define NUM_WORDS 2
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
const string WORDS[NUM_WORDS] = {"wall", "glasses"};
const string HINTS[NUM_WORDS] = {"brick", "worn on head"};
string hw[NUM_WORDS][NUM_WORDS];
for(int i=0; i < NUM_WORDS; i++)
for(int j=0; j < NUM_WORDS; j++)
{
if(i > 0)
hw[i][j] = HINTS[j];
else if(j > 0)
hw[i][j] = WORDS[i+1];
else
hw[i][j] = WORDS[i];
}
for(int i=0; i < NUM_WORDS; i++)
for(int j=0; j < NUM_WORDS; j++)
{
cout << "hw[" << i << "][" << j << "]= " << hw[i][j] << endl;
}
char c;
cin.get(c);
return 0;
}
For some reason no matter what I do the box will not let me copy and paste the code in so that it formats correctly. sorry.
出于某种原因,无论我做什么,该框都不会让我复制和粘贴代码以使其格式正确。对不起。
回答by SigmaXiPi
Though the book tells you to use 2 arrays, the better way to do this would be an array of structures so that you can access the words and hints by name rather than by an integer index. An ad hoc structure is also better than a pair since you can name the members. Another useful trick in C++ is to have the compiler calculate the number of elements in the array using the sizeof operator. This reduces redundancy in the code which reduces the chances of bugs.
尽管本书告诉您使用 2 个数组,但更好的方法是使用结构数组,以便您可以通过名称而不是整数索引访问单词和提示。临时结构也比成对更好,因为您可以命名成员。C++ 中另一个有用的技巧是让编译器使用 sizeof 运算符计算数组中的元素数。这减少了代码中的冗余,从而减少了错误的机会。
int main(){
/////////////version 1 - the way I would do it
struct element{
string word;
string hint;
};
const element array[] = {
{"wall", "brick..."},
{"glasses", "corrective eye tool thingymajig"},
{"calculator", "number cruncher"}
};
const size_t NUM_WORDS = sizeof(array)/sizeof(element);
for(size_t i=0; i<NUM_WORDS; i++){
cout << array[i].word << ": " << array[i].hint << endl;
}
/////////////version 2 - the way the book asks for it
const string array2[][2] = {
{"wall", "brick..."},
{"glasses", "corrective eye tool thingymajig"},
{"calculator", "number cruncher"}
};
const size_t NUM_WORDS2 = sizeof(array2)/(sizeof(string)*2);
for(size_t i=0; i<NUM_WORDS2; i++){
cout << array2[i][0] << ": " << array2[0][1] << endl;
}
}