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
廣告