具体来说,我想从输入pat = "aab"
和string = "ababbaabaa"
开始逐步完成算法。我在查找嵌套for循环内部的内容时遇到了麻烦,因为我不太精通C语言。函数看起来像这样:
int nfind(char * string, char * pat){
int i = 0, j = 0, start = 0; //
int lasts = strlen(string) - 1; //
int lastp = strlen(pat) - 1; //
int endmatch = lastp; //
for (i = 0; endmatch <= lasts; endmatch ++, start ++){ //
if (string[endmatch] == pat[lastp]){
for (j = 0, i = start; j < lastp && string[i] == pat[j]; i ++, j++)
;
}
if (j == lastp)
return start;
}
return -1;
}
因此,当最初调用该函数时,我们会i=j=start=0
,lasts=9
,lastp=2
和endmatch=2
。
从endmatch < lasts
开始,我们运行for循环。我不确定行if (string[endmatch] == pat[lastp])
的含义。我熟悉if
语句,但我不确定他们是否要求if endmatch == lastp
或者是否与字符数组有关。这里的任何帮助将不胜感激。
答案 0 :(得分:1)
也许你理解的问题是缺乏对C语言中字符串的理解。
使用[]
方括号运算符可以访问索引处的元素。
这是写*(pointer + index)
的简写。它使用指针算术来查找一个pointer + index * sizeof(subscript type)
的地址,并通过解除引用指针来直接(引用)访问该元素。
C中的字符串主要表示为由NULL字符完成的字符数组。因此pat[lasstp]
是字符串char
中lastp
位置的pat
类型。
注意:
需要注意的是char array[20];
和char* pointer = __alloca(20);
之间存在差异(或者从堆栈中获取空间的确切方式)。我只想指出数组类型和数组类型“衰减”到指针类型之间的区别,只要编译器认为指针是它可以使用的东西,当数组类型不合适时。登记/>
参考:Arrays decaying into pointers
和What is array decaying?
这是一个非常微妙的细节,今天你的问题更基本。