为了解决K&R C书中的问题,我正在尝试编写一个函数
strstrci()
,这是strstr()
的不区分大小写的版本
char * strstrci (char *s, char *p)
{
int i, j;
for (i = 0; *(s + i) != '\0'; i++)
{
if (*(s + i) == *p || *(s + i) == *p + 32 || *(s + i) == *p - 32)
{
for (j = 1; *(s + i + j) == *(p + j) || *(s + i + j) == *(p + j) + 32 || *(s + i + j) == *(p + j) - 32; j++)
{
if (*(p + j) == '\0')
return (s + i);
}
}
}
return NULL;
}
该函数似乎适用于所有情况,除非模式是输入字符串的最后部分。例如: string : 他坐在墙上 图案: 坐 在这种情况下,它返回 NULL。 有错误请指出
谢谢大家。 @Lundin,你的建议已被采纳。 我随后意识到对 ' ' 的检查应该在 for 循环终止后进行。 所以修改后的代码是
char * strstrci (char *s, char *p)
{
int i, j;
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] == *p || s[i] == *p + 32 || s[i] == *p - 32)
{
for (j = 1; s[i + j] == p[j] || s[i + j] == p[j] + 32 || s[i + j] == p[j] - 32; j++);
if (p[j] == '\0')
return &s[i];
}
}
return NULL;
}
这适用于所有情况。