C++中二維字元陣列中給定字串的計數


以下問題是每日報紙填字遊戲的示例,這裡我們得到一個二維字元陣列,問題陳述是從二維字元陣列迷宮中找出給定的單詞。搜尋演算法包括從上到下右到左以及反過來查詢單個字元,但不包括對角線方向。

讓我們透過例子來理解

輸入- 字串單詞-LAYS

二維字串[ ] - { "LOAPYS", "KAYSOT", "LAYSST", "MLVAYS", "LAYSAA", "LAOYLS" };

輸出- 二維字元陣列中給定字串的計數:7

解釋 - 給定一個字串陣列,我們必須從中找到單詞“LAYS”,它可以在任何方向搜尋,例如從上到下,從右到左,從下到上,以及從左到右。程式碼中的計數器標誌在每次找到給定的搜尋字串時都會累加,最後返回計數作為結果。在這個例子中,我們可以看到LAYS出現了7次,即:

1->LOAPYS -LAYS-> 從左到右

2 ->SAYAOL-LAYS(從右到左)

3->LAYSST-LAYS(從左到右)

4->MLVAYS-LAYS(從左到右)

5->LAYSAA-LAYS(從左到右)

6->LAOYLS-LAYS(從左到右)

7->(從下到上) 紅色LAYS

輸入- 字串單詞- CAMP

二維字串[ ] - { "BLOOKS", "BPOOLK", "KOHPKB", "BOLKOK", "LKIOOB", "LAHYBL" }

輸出-二維字元陣列中給定字串的計數:0

解釋 - 給定一個字串陣列,我們必須從中找到單詞“LAYS”,它可以在任何方向搜尋,例如從上到下,從右到左,從下到上,以及從左到右。程式碼中的計數器標誌在每次找到給定的搜尋字串時都會累加,最後返回計數作為結果。在這個例子中,我們可以看到BOOK出現了0次。

下面程式中使用的方法如下

  • 我們得到一個字串(單詞)和一個字串陣列,以及一些實用程式變數,這些變數傳遞到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 << "Count of number of given string in 2D character array: " << findString(word, 0, 0, str, (sizeof(inp) / sizeof( * inp)), str[0].size());
         return 0;
}

如果我們執行上面的程式碼,它將生成以下輸出:

輸出

Count of number of given string in 2D character array: 6

更新於:2021年1月29日

522 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始
廣告