C ++中2D字符数组中给定字符串的数量计数

下面的问题是日报填字游戏的一个例子,在这里我们给出一个2维字符数组和问题陈述是找出从2维字符数组给定词maze.The搜索算法包括寻找从单个字符顶到-Bottom从右到左,反之亦然,但不是对角线。

让我们用例子来理解

输入字符串字LAYS

2D String []-{“ LOAPYS”,“ KAYSOT”,“ LAYSST”,“ MLVAYS”,“ LAYSAA”,“ LAOYLS”};

输出-2D 字符数组中给定字符串的数量计数:7

说明-有了单词的字符串数组,我们必须从中找到单词“ LAYS”,可以在任何方向上搜索,例如上下,左右,上下和左右。每当找到给定的搜索字符串时,代码中的计数器标志就会累加,并在结果的末尾返回计数。在示例中,我们可以看到LAYS形成了7次,即

1-> L O A P YS -LAYS->从左到右

2 - >小号YA ö大号-LAYS(Right to Left)

3-> LAYSS T-LAYS(Left to Right)

4-> M L V AYS-LAYS(Left to Right)

5-> LAYSA A-LAYS(Left to Right) 

6-> LA Ø YLS -LAYS(Left to Right)

7->(从下到上)红色图层

输入-字符串词-CAMP

2D字符串[]-{“ BLOOKS”,“ BPOOLK”,“ KOHPKB”,“ BOLKOK”,“ LKIOOB”,“ LAHYBL”}

输出-二维字符数组中给定字符串的数量计数:0

说明-:当我们得到单词的字符串数组时,我们必须从中找到单词“ LAYS”,可以在任何方向上搜索,例如上下,左右,上下和左右。每当找到给定的搜索字符串时,代码中的计数器标志就会累加,并在结果的末尾返回计数。在示例中,我们可以看到BOOK形成了次。 

以下程序中使用的方法如下

  • 我们给与一个String(word)String数组,它和一些实用程序变量一起被传递到findString()进一步处理中。

  • 然后遍历矩阵中的字符,并拾取一个字符以开始字符串。

  • 对于已拾取的字符,我们根据算法在所有可能的方向上递归找到给定的字符串

  • 如果找到匹配项,则计数器增加

  • 在完成第一个起始字符之后,对下一个字符重复此过程

  • 然后使用相应的匹配项计算计数总和

  • 然后捕获最终答案,并打印结果。 

示例

#include <bits/stdc++.h>
using namespace std;
int utilitySearch(string word, int r, int c, string arr[], int maxR, int maxC, int index) {
   int count = 0;
   if (r >= 0 && r <= maxR && c >= 0) {
      if (c <= maxC && word[index] == arr[r][c]) {
         char res = word[index];
         index = index + 1;
         arr[r][c] = 0;
         if (word[index] == 0) {
            count = 1;
         } else {
            count = count + utilitySearch(word, r, c + 1, arr, maxR, maxC, index);
            count = count + utilitySearch(word, r, c - 1, arr, maxR, maxC, index);
            count = count + utilitySearch(word, r + 1, c, arr, maxR, maxC, index);
            count = count + utilitySearch(word, r - 1, c, arr, maxR, maxC, index);
         }
         arr[r][c] = res;
      }
   }
   return count;
}

int findString(string word, int r, int c, string str[], int countR, int countC) {
   int count = 0;
   for (int i = 0; i < countR; ++i) {
      for (int j = 0; j < countC; ++j) {
         count = count + utilitySearch(word, i, j, str, countR - 1, countC - 1, 0);
      }
   }
   return count;
}

int main() {
      string word = "FLOOD";
      string inp[] = {"FPLIOKOD","FLOODYUT","YFLOODPU","FMLOSODT","FILPOYOD", FLOOOODE " };
         string str[(sizeof(inp) / sizeof( * inp))];
         for (int i = 0; i < (sizeof(inp) / sizeof( * inp)); ++i) {
            str[i] = inp[i];
         }
         cout << "二维字符数组中给定字符串数的计数: " << findString(word, 0, 0, str, (sizeof(inp) / sizeof( * inp)), str[0].size());
         return 0;
}

如果我们运行上面的代码,它将生成以下输出-

输出结果

二维字符数组中给定字符串数的计数: 6

猜你喜欢