-2

そこで、元の strstr() 関数とまったく同じように動作する mystrstr() 関数を作成しました。私は膨大な量のケースをテストしましたが、私の機能は機能しているようです。ただし、オンライン提出システムの一部のテストに合格しません。

手伝って頂けますか?

int mystrcmp(char *a, char *b)
{
    int n = mystrlen(a);
    int m = mystrlen(b);
    int l = n;
    if (m<n) l = m;

    //printf("strcmp => %d %d\n", n, m);
    for (int i=0; i<l; i++)
    {
        //printf("%c %c\n",a[i],b[i]);
        if (a[i]<b[i]) return -2;
        else if (a[i]>b[i]) return 2;
    }

    if (n<m) return -1;
    else if (n>m) return 1;
    else return 0;
}


char *mystrstr(char *haystack, char *needle)
{
    int n = mystrlen(haystack);
    int m = mystrlen(needle);
    if (n==0&&m==0) return haystack;
    int result;

    for (int i=0; i<=(n-m); i++)
    {
        result = mystrcmp(haystack+i, needle);
        if (result==1||result==0||result==-1)
            return haystack+i;
    }
    return NULL;
}
4

2 に答える 2

0

mystrcmpあなたは冗長であることに注意してください。あなたはただ使うことができます

if (!memcmp(haystack+i, needle, m)) {
     return haystack+i
}

使用が許可されていない場合はmemcmp、独自に記述してください。しかし、破棄しmystrcmpます。

于 2012-11-18T00:42:30.447 に答える
-4
if (n==0&&m==0) return haystack; 

「||」が必要です オペレーター。

if (m<n) l = m;

「m != n」の場合、2 つの文字列の長さが等しくないため、等しくありません。

残りについてはよくわからないので、それ以上は調べませんでした。

于 2012-11-18T00:19:09.900 に答える