【问题标题】:Word Search Puzzle: How do I search an array of letters to find a word?单词搜索难题:如何搜索一组字母以找到单词?
【发布时间】:2016-12-05 20:33:03
【问题描述】:

我正在尝试创建一个单词搜索益智游戏,要求用户输入他们认为在数组中的单词,如果找到该单词,则给用户一分(总共 10 分,之后会打印一条祝贺信息)。

在这段代码中,我有一个常规数组,但根据一些研究,我认为二维数组可能更好。你觉得呢?你有没有什么想法?具体来说,我对应该考虑哪种搜索算法感兴趣

#include <iostream>
using namespace std;

int main() {
// your code goes here

  cout<<"=================================================================================="<<endl; 
cout<<"||                                                                              ||"<<endl;
cout<<"||                        Welcome to the ECE 114 Game Design!                   ||"<<endl;
cout<<"||                                                                              ||"<<endl;
cout<<"=================================================================================="<<endl;   
cout<<"This is a sample output"<<endl; 


//We want to ask the user to enter a word that they think the cross-word puzzle contains
//if the puzzle contains that word, we tell the user they are correct and update their points
//score by 1. Total of 10 points to gain, when the points score reaches 10 the user gets congratulatory message

string myArray[] = { "A B C D E F G H
                      S P A D E T R Y
                      T I G O A L E A
                      T R A I N E A W
                      O A P B E A T N  "};
//The first array above will just be a visual for the player to see

//This second array is the one that I will use to search for words

 char wordBank[5][8] = [[ 'A', 'B ','C', 'D', 'E', 'F', 'G', 'H'],  
                    ['S','P', 'A', 'D', 'E', 'T', 'R', 'Y'], 
                    ['T', 'I', 'G', 'O', 'A', 'L', 'L', 'E', 'A'], 
                    ['T', 'R','A', 'I', 'N', 'E', 'A', 'W'], 
                    ['O', 'A', 'P', 'B', 'E', 'A', 'T', 'N']];

cout<<myArray<<endl;





return 0;
}

【问题讨论】:

  • 这是一个字符数组(或二维)数组比一个只包含一个字符串的字符串数组更好的地方。
  • 这段代码可以编译吗?我怀疑在数组声明中的字母H 之后会有警告或错误。
  • @ThomasMatthews 我将在一秒钟内使用二维数组对其进行更新。并且代码没有编译。我现在只是在写伪代码;我的算法不太正确
  • 查看std::string::find 以搜索字符串(水平方向)。

标签: c++ arrays search


【解决方案1】:

我建议您添加一些额外的变量以使搜索更容易。例如,在垂直和水平方向创建文本字符串。

static const std::string puzzle_text[] =
{
  "ABCDEFGH",
  "SPADETRY",
  "TIGOALEA",
  "TRAINEAW",
  "OAPBEATN"
};

int main(void)
{
  std::string vertical_texts[8];
  for (unsigned int column = 0; column < 8; ++column)
  {
    for (unsigned int row = 0; row < 5; ++row)
    {
      vertical_text[column] += puzzle_text[row].at(column);
    }
  }
  return 0;
}

通过为垂直字母创建字符串,可以使用std::string::find。每个拼图只需要创建一次垂直字符串。

OP 的任务:反向搜索(参见std::string 方法)和对角字符串创建。

编辑 1:搜索算法
这是我用来搜索这些谜题的算法:
1.提取关键词的首字母。
2. 在文本行中搜索字母。
3.如果找到字母,则检查相邻字母是否有关键字的第二个字母。
3.1。如果找到第 2 个字母,则继续按方向并搜索关键字的剩余字母。

这对我很有帮助,尤其是对于难以找到的单词。

【讨论】:

  • 谢谢。我想改用二维数组。我已经编辑了我的帖子以说明我的意思。也谢谢你的解释
  • 无论拼图是二维字符矩阵还是一维字符串数组,算法都是相同的。了解它们,然后适应它们。
  • 你会不会碰巧知道如何实现一个计时器?这只是为了改进我的程序并获得一些真正的赌注——为这场比赛感到自豪。我希望用户知道他们完成游戏需要多长时间(正确回答所有 10 个单词)
  • 定时器是平台和操作系统相关的功能。在互联网上搜索您的操作系统和“计时器”一词。如果他们支持计时器,您应该能够看到一些示例。例如,在嵌入式系统中,我们在 SOC 上使用定时器。当它过去时,它会产生并中断。在中断服务程序中,我们处理定时器。 Windows 可能仍在等待对象 API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
相关资源
最近更新 更多