在c ++中初始化const多维数组

时间:2009-11-02 18:00:17

标签: c++ arrays const multidimensional-array

我目前正在编写一本c ++书中的练习,该书使用基于文本的游戏作为教学工具。我坚持的练习涉及让电脑从const数组(字符串)中选择一个单词,混合字母并要求玩家猜出单词。这很容易,但是随后本书要求添加选项以向玩家提供提示以帮助他们猜测,首先作为并行数组(再次,没问题)然后作为二维数组。这就是我被困住的地方。我的(缩短的)单词数组如下:

const string WORDS[NUM_WORDS] = {"wall", "glasses"};

我需要提供每个单词的提示,但不知道如何去做。从手机上发布这么广泛的谷歌搜索不是一种选择!

我的并行数组如下:

const string HINTS[NUM_WORDS] = "brick...", "worn on head"};

只需将两者结合起来。

提前致谢, 百里

5 个答案:

答案 0 :(得分:14)

你可以制作2d阵列吗?

string aArray[][2] = {{"wall", "brick..."}, 
                               {"glasses", "corrective eye tool thingymajig"},
                               {"calculator", "number cruncher"}};

不确定语法是否正确,但我希望你能得到这个概念。

它是另一个数组中的数组。

已编辑:我从第一个方括号中移除了NUM_WORDS。你不能从变量声明多维数组..抱歉,我忘记了。我只是测试了它并且有效。

答案 1 :(得分:4)

使用struct array:

typedef struct
{
    string Word;
    string Hint;
}
WORDDEF;

const WORDDEF WordList[] =
{
    {"wall", "brick..."},
    {"glasses", "worn on head"},
    ...
};

然后你将它们称为:

printf ("For entry %d, Word is %s, Hint is %s\n", 1, WordList[1].Word, WordList[1].Hint);

答案 2 :(得分:0)

...嗯 也许你应该使用pair struct?

std::pair<std::string, std::string> WORDS[10] = { make_pair("wall", "brick"), 
                                                  make_pair("glasses, worn") }

现在,您可以使用WORDS [i] .first - 作为未知单词

和WORDS [i]。第二个提示。

答案 3 :(得分:0)

这是一个简单的例子,它将为您提供一个二维数组[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;
}

出于某种原因,无论我做什么,该框都不会让我复制并粘贴代码,以便正确格式化。遗憾。

答案 4 :(得分:-1)

虽然本书告诉你使用2个数组,但更好的方法是使用一个结构数组,这样你就可以按名称而不是整数索引来访问单词和提示。 ad hoc结构也比一对更好,因为您可以为成员命名。 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;
  }    
}