-2

因此,我编写了一个 mystrstr() 函数,它的行为应该与原始 strstr() 函数完全相同。我已经测试了大量的案例,我的功能似乎有效。但是,它没有通过在线提交系统的一些测试。

你能帮助我吗?

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" 那么这两个字符串的长度不相等,因此不相等。

其他的就不清楚了,没看太远。

于 2012-11-18T00:19:09.900 回答