2017-01-23 17 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"); 
} 

なぜ-1の代わりに4が返されますか? y[0]='\o'はありませんか?文字列の位置に関連する混乱

+4

をオフセットされ、 'Y [0]' '実際にあります'o'' – Bathsheba

+0

多分、入力例と期待される出力を投稿することができます。 – RoadRunner

+0

入力の例がf( "knosos"、 "os")で出力が4のnの値ですが、教師が与えた演習ですが、フレーズが混乱していますアップ。 – user2877858

答えて

1

これは、文字列xの最後の文字列yを検索します。

forループでは、比較が意味のある最後の位置からオフセットnで比較します。 x[i] == y[j]テストを失敗せずにストリングy全体を処理すると、一致が見つかり、オフセットnが返されます。そうでない場合は、nを減らしてもう一度お試しください。 nが0より小さくなったら、yのすべての位置を試して、オフセット-1を返すことであきらめます。

は、だからあなたの例では"knosos""os"の最後の出現は確かで4

(あなたがstrlenを使用しているため、また#include <string.h>があるはずです。)

関連する問題