我目前正在编写一本c ++书中的练习,该书使用基于文本的游戏作为教学工具。我坚持的练习涉及让电脑从const数组(字符串)中选择一个单词,混合字母并要求玩家猜出单词。这很容易,但是随后本书要求添加选项以向玩家提供提示以帮助他们猜测,首先作为并行数组(再次,没问题)然后作为二维数组。这就是我被困住的地方。我的(缩短的)单词数组如下:
const string WORDS[NUM_WORDS] = {"wall", "glasses"};
我需要提供每个单词的提示,但不知道如何去做。从手机上发布这么广泛的谷歌搜索不是一种选择!
我的并行数组如下:
const string HINTS[NUM_WORDS] = "brick...", "worn on head"};
只需将两者结合起来。
提前致谢, 百里
答案 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;
}
}