首页 > 解决方案 > 在 C 中搜索子字符串

问题描述

这是在二维数组中搜索子字符串 int search_left2right(char * matrix, char * word) { int i;

for (i = 0; i != ROW*COLUMN; ++i) {
int j = i;
char * w = word;

while (*w == matrix[j]) {
  if (!*++w)
    return i * 1000 + j;
  if (++j == ROW*COLUMN)
    j = 0;
}
}

return -1;
}

有人可以向我解释这两行的作用吗?特别是 if 语句,任何人都可以让这个代码不使用任何指针,当我实现它时他们会弄乱我的代码。我想让char * w = word;这行是不必要的。有点像while(word[something]=matrix[j]但我不能让它工作

 while (*w == matrix[j]) {
  if (!*++w)

这是它正在做的事情

Enter the string to be searched in the puzzle:
SHOUT
position in the puzzle: 12
PUZZLE(MATRIX)
X  T  Z  M  Q  Y  K  C  E  C  F  H -->0 1 2 3 4 5 6 7 8 9 10 11 
*S  H  O  U  T*  E  X  O  E  A  P  I -->12 13 14 ------------23
X  G  T  L  Q  B  E  L  T  N  F  K
A  I  R  I  D  Z  A  L  L  I  O  D
M  E  I  E  T  Y  S  E  H  R  T  I
A  W  B  R  N  E  T  C  W  O  H  X
N  O  U  I  R  U  Z  T  S  C  C  T
U  D  T  P  E  C  J  I  E  H  R  U
A  L  E  M  C  S  Y  O  N  I  U  R
L  V  *K  E  R  E  M*  N  I  P  H  E
E  A  N  B  U  R  E  J  O  N  C  Y
A  W  I  I  I  J  N  J  R  U  Y  F
D  W  T  N  T  H  E  N  P  J  Y  T
E  Q  L  Z  D  I  L  E  M  M  A  B
R  C  I  T  E  N  G  A  M  T  P  C
returns the index of the words first element

标签: carraysmatrixsubstring

解决方案


在代码中

while (*w == matrix[j]) {
   if (!*++w)

while条件是使用普通的取消引用。它读作“存储在 w 中的内存地址指向的内存位置上的字符。然后,测试该字符与位于 index 的矩阵数组中的元素是否相等j

if条件应分解为其各自的操作。对于没有 C 经验的人来说,那里发生的事情太多了,无法理解:

w = w + 1; // or ++w.  Advances w to the next memory location.
if (*w == 0) // is the character at that location the null termination character?

推荐阅读