繁体   English   中英

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

[英]initializing a const multidimensional array in c++

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

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

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

我的并行数组如下:

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

只需要将两者结合起来。

先谢谢你,巴里

你可以制作2d阵列?

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

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

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

编辑:我从第一个方括号中删除了NUM_WORDS。 你不能从变量声明多维数组..抱歉,我忘记了。 我只是测试它,它的工作原理。

使用struct数组:

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);

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

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

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

和WORDS [i]。第二个作为其暗示。

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

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

虽然本书告诉您使用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;
  }    
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM