gpt4 book ai didi

c - 在纯 C 语言中,不使用 strlen 或任何使用 strlen 的库函数,如何确定一个字符串是否包含在另一个字符串中?

转载 作者:行者123 更新时间:2023-11-30 21:40:58 26 4
gpt4 key购买 nike

我说strlen没用出于效率目的。因为如果你使用strlen那么你已经迭代了一个字符串,并且最好的算法总是迭代给定的容器不超过一次。所以请帮助我思考如何实现一个功能

bool contains ( char * s1, char * s2 ) 
{
// ...
}

尝试:

bool contains ( char * s1, char * s2 ) 
{
// returns true or false depending on whether s1 is contained in s2

// define that every string contains the empty string
if ( !*s1 ) return true;

// search for substrings of s2 that equal s1
bool flag = true;
while ( *s2 )
{
char * c = s1;
while ( *c++ == *s2++ );
if ( !*c )
{
flag = true;
break;
}
else
{
flag = false;
}
}
return flag;
}

但是,我想进行一些优化

  • 如果可能的话,希望摆脱 flag因为它是一个额外的内存字节
  • else { flag = false; }是一个大多数时候都会输入的条件 block ,每次输入时都会执行相同的操作,所以我想以某种方式摆脱它
  • 尽管 if ( !*s1 ) return true;早期中断有助于更优雅地编写函数的其余部分,我讨厌在函数开头进行“一个特殊情况”条件检查。如果可能的话,我希望该函数能够直接开始进入包含所有逻辑的单个循环。
    • char * c = *s1循环的每次迭代中的复制都是一个额外的字节,很高兴摆脱它,但我不知道如何摆脱它

那我会写这个吗?

最佳答案

你真的需要自己实现这个吗?首先,有一个函数 strstr 可以轻松地为您解决这个问题,请参阅这里了解更多信息:http://en.cppreference.com/w/c/string/byte/strstr

如果您确实需要自己实现此功能,则没有必要重新发明轮子。有许多可用的字符串搜索算法,最常见的三种是:

每个人都有自己的优点和缺点,请阅读这些链接以获取更多信息。

关于c - 在纯 C 语言中,不使用 strlen 或任何使用 strlen 的库函数,如何确定一个字符串是否包含在另一个字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36566720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com