c - 在 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
解决方案
在代码中
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?
推荐阅读
- python - 批准文档
- r - 如何更改此 ggplot 中图例的标题
- java - 使用 Spring Boot 2 控制器 StreamingResponseBody 流式传输视频文件 mp4
- r - 如何选择部分匹配的列对它们进行排序
- javascript - JSON 字符串 onclick 函数
- azure-devops - 从构建脚本推送到工件的 nuget 无法进行身份验证
- html - 仅滚动一个居中的 flex div
- protocol-buffers - Protobuf:当一个空的protobuf对象被发送时,它被转换为空对象是真的吗?
- c# - 为什么
在 TabbedPage 中不起作用? - python - 在 PyCharm Professional 中显示 ssh 解释器的保存密码