2017-01-23 169 views
1
#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'与字符串位置相关的混淆

+4

'Y [0]'其实' 'o'' – Bathsheba

+0

也许你可以发布示例输入和预期输出。 – RoadRunner

+0

那么示例输入是f(“knosos”,“os”),并且输出是4,这是n的值,但我不明白这是如何工作的。这是老师给出的练习,但是这个练习是混乱的向上。 – user2877858

回答

1

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

for循环中,您在偏移量n处比较,从比较有意义的最后一个位置开始。如果您设法通过整个字符串y而不失败x[i] == y[j]测试,则您找到匹配并返回偏移量n。如果不是,则减少n并重试。一旦n变得小于零这种方式,你已经尝试所有职位为y,并通过返回偏移-1放弃。

所以,在你的榜样的"os""knosos"最后一次出现是在确实偏移4.

(也应该有一个#include <string.h>因为你用strlen