所以,我编写了一个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;
}
答案 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”那么两个字符串的长度不相等,因此不相等。
对其余部分不确定,没有进一步了解。