strstr() 的不区分大小写版本

问题描述 投票:0回答:1

为了解决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。 有错误请指出

c strstr
1个回答
0
投票

谢谢大家。 @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;
}

这适用于所有情况。

© www.soinside.com 2019 - 2024. All rights reserved.