c - 实现这种效果的代码更少?

标签 c string performance function substring

我正在研究一些字符串操作函数,只是出于我自己的兴趣。但是,我可能想在以后的代码中使用这些函数。我编写了以下代码来检查字符串中是否存在子字符串。我遇到了一个问题。我的程序比较两个字符串中的每个字符,但是它遇到乱序字符的问题。解释起来会花很长时间,所以我只举个例子:

如果检查字符串“foobar”中是否存在“oobar”,我的程序将无法找到子字符串的位置,因为它会在字符“o”的第一个实例上出错 我为此开发了一个变通办法,但这就是一个变通办法,而不是真正可靠的解决方案。所以我想知道是否有人可以告诉我他们将如何改进以下代码(请记住我不想使用任何其他库):

int chksbstr(char *str, char *sbstr)
{
    int i, sbstrlen, strlen, p = 0;

for(i = 0; sbstr[i] != '\0'; i++);
sbstrlen = i;
for(i = 0; str[i] != '\0'; i++);
strlen = i;
if(sbstrlen > strlen)
{
    printf("\n**Error substring is larger than base string!");
    return 2;
}
if(sbstrlen == strlen)
{
    if(str == sbstr) return 0;
    else return 1;
}
for(i = 0; i <= strlen; i++)
{
    if(str[i] == sbstr[p]) p++;
    else if(str[i] != str[i - 1]) p = 0;
    if(p == sbstrlen) return 0;
}
return 1;
}

最佳答案

少了 23 行:

if (strstr(baseString, subString) != NULL)
{
    /* contains */
}

关于c - 实现这种效果的代码更少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11901520/

相关文章:

c# - 比较两个字符串值

performance - 网站上的滚动行为非常缓慢……

c++ - 迭代器与反向迭代器

c - cvGet2D 和 cvSet2D 的用途?

c - 核心音频录制的声音失真且有噪音

python - 如何在python正则表达式中将数字大小限制为单个

Python:Pandas 将每一行连接成一个字符串

c - 在 C 中将 timeval 类型转换为字符串

java - 如何使用 JNI 传递和接收对象

java - 如何减少 Full GC 的数量?