[英]C find string in text diagonally
任何人都可以幫助我組織此類功能(作為我使用填字游戲程序管理的家庭作業):
1)我有字符串數組(一種文本文件),其中
row[0] = "str1"
row[1] = "str2"
, row[1] = "str2"
。
2)每個字符串的長度相同
3)從stdin輸入的單詞,如abcd
我需要在對角線位置的文本中找到單詞abcd
(從左到右只需要一種算法就沒關系),然后將找到的單詞替換為零。 可以在strchr
中找到第一個字母,但是如何正確繼續並將文本替換為零? 誰能給我任何線索?
解:
Tnx用於減法。 我找到了另一種解決方案,其中將每條對角線生成為1條簡單線,然后將strstr
應用於它以找到匹配位置。 知道匹配的位置和匹配的字符串的長度使得能夠精確地檢測線陣列中的匹配單元的位置。
我使用了這樣的代碼(也許smn會發現它有用):
/* generating left-right diagonal string str */
for( col = cols - len; col >= 0; col --, i = 0 ){
/* where len is the length of searching string */
while( ( col+i ) < cols && i < rows ){
*(str + i) = res[i][col+i];
i ++;
}
*(str + i) = '\0';
//some match seq.
}
我做了從左上單元格(第一個字符串的開始)到最后一個頂部單元格(第一個字符串的結束)的左對角線。 然后對左列使用相同的過程,因此生成的算法將覆蓋所有字符串。
您可能希望使用2維字符數組,例如
char grid[i][j]
並且如果您的第一個字母在grid[i][j]
上,則對角線的下一個點在
grid[i+1][j+1]
對於+1
和-1
每種組合,依此類推
找到第一個字母,讓我們在row [5]說出索引為7的字母(所以row[5][7]
)。 然后檢查row[6][8]
是否為第二個字母; 或row[4][6]
或row[4][8]
或row[6][6]
。 繼續輸入第三個字母,可能是重復出現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.