C中的这个迭代函数有什么作用?

时间:2016-02-08 01:20:05

标签: c for-loop iteration

具体来说,我想从输入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=0lasts=9lastp=2endmatch=2

endmatch < lasts开始,我们运行for循环。我不确定行if (string[endmatch] == pat[lastp])的含义。我熟悉if语句,但我不确定他们是否要求if endmatch == lastp或者是否与字符数组有关。这里的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

也许你理解的问题是缺乏对C语言中字符串的理解。

使用[]方括号运算符可以访问索引处的元素。 这是写*(pointer + index)的简写。它使用指针算术来查找一个pointer + index * sizeof(subscript type)的地址,并通过解除引用指针来直接(引用)访问该元素。

C中的字符串主要表示为由NULL字符完成的字符数组。因此pat[lasstp]是字符串charlastp位置的pat类型。

注意:
需要注意的是char array[20];char* pointer = __alloca(20);之间存在差异(或者从堆栈中获取空间的确切方式)。我只想指出数组类型和数组类型“衰减”到指针类型之间的区别,只要编译器认为指针是它可以使用的东西,当数组类型不合适时。登记/> 参考:Arrays decaying into pointers
What is array decaying?
这是一个非常微妙的细节,今天你的问题更基本。