2017-01-23 21 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