任何人都可以帮我找到这个C函数中的错误吗?

时间:2012-11-18 00:14:23

标签: c sorting pointers cstring

所以,我编写了一个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;
}

2 个答案:

答案 0 :(得分:0)

请注意,您的mystrcmp是多余的。你可以使用

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

如果您不允许使用memcmp,请自行编写。但丢弃mystrcmp

答案 1 :(得分:-4)

if (n==0&&m==0) return haystack; 

你想要“||”运营商。

if (m<n) l = m;

你知道如果“m!= n”那么两个字符串的长度不相等,因此不相等。

对其余部分不确定,没有进一步了解。