混乱与字符串的位置有关

时间:2017-01-23 11:43:54

标签: c c-strings

#include <stdio.h>
#include <stdlib.h>

int f(char x[], char y[])
{
  int i, j, n = strlen(x) - strlen(y);
  while (n >= 0) {
    for (i = n, j = 0; y[j] != '\0' && x[i] == y[j]; ++i, ++j);
    if (j > 0 && y[j] == '\0')
      return n;
    n--;
  }

  return -1;
}

int main()
{
  f("knosos", "os");
}

为什么这会返回4而不是-1?不是y[0]='\o'

1 个答案:

答案 0 :(得分:1)

这会在字符串y中搜索字符串x的最后一次出现。

for循环中,您在偏移n处进行比较,从比较有意义的最后一个位置开始。如果您设法通过整个字符串y而未通过x[i] == y[j]测试,则找到匹配项并返回偏移量n。如果没有,请减少n,然后重试。一旦n变为小于零,您就会尝试y的所有排名,并通过返回偏移量-1来放弃。

因此,在您的示例中,"os""knosos"的最后一次出现确实是偏移量为4。

(还应该有#include <string.h>,因为您使用的是strlen。)