【发布时间】:2010-08-01 15:54:31
【问题描述】:
我正在尝试编写一个小的 CLI Hangman 游戏,只是为了使用我非常有限的一组语言功能在 C 中创建一些东西,使到目前为止的信息保持不变。
我还没有到书中的字符串,所以我创建了一个所谓的字典,它是一个多维字符数组,每一行代表一个单词,并且每列一个字母。因此,如果我想将今天 Dictionary.com 的当日单词(“预测”)放入字典中,我会写类似
dictionary[MAX_WORDS][MAX_CHARS] = {
...
{'p', 'r', 'o', 'g', 'n', 'o', 's', 't', 'i', 'c', 'a', 't', 'e'},
...
}
接下来,我将要在屏幕上打印的单词表示为一个字符数组,最初由下划线组成。
我的想法是,当玩家输入一个字母时,我会检查它是否存在于当前单词中。如果是这样,我将word[] 数组中的下划线替换为实际字母。当word[] 数组中没有下划线时,我认为该词被猜到了。
首先想到的是编写一个函数int in_array(char array[], char letter),它会根据是否在数组中找到字母来返回0或1。但后来我发现我不能将dictionary[][] 作为第一个参数传递。到目前为止,我还没有找到解决方案,所以我必须使用两个函数,一个用于每个数组,或者......重新考虑整个想法。
所以总结一下,我需要一个函数来检查一个元素是否存在于一维或多维数组中。有什么解决办法吗?提前致谢!
【问题讨论】:
-
二维数组是一个指向指针数组的指针——因此,如果它采用
char **类型的参数,您可以将其传递给函数。但是如果你知道当前的单词,你就不能通过dictionary[currentWordIndex]吗? -
@sje397:不!二维数组不是指向指针数组的指针,而是数组数组。像所有数组一样,它在传递给函数时衰减为指向其第一个元素的指针,但这种类型是指向数组的指针,而不是指向指针的指针。
char (*)[MAX_CHARS]与char **的类型不同。 -
可以返回匹配在单词中的位置。如果有两个以上的匹配,你必须重新考虑这个解决方案。您可以通过传递对问题的引用并在解析与字母匹配的单词时更新它,从而在问题中显示匹配的字母。