- 论坛徽章:
- 0
|
关于g-bios标准库中的string库函数strrchr函数的实现,我有点疑问。
strrchr函数原型:char *strrchr(const char *psrc, size_t c);
其功能,我的理解是返回源字符串最后一个首字符与变量c匹配的字串。
我的思路是定义一个指针变量记录首字符匹配的位置,形参指针变量遍历整个源字符串,当源字符串遍历完了,定义的指针变量刚好记录了最后一个首字符匹配的地址,于是自己写了一个strrchr函数如下:
char *strrchr(const char *psrc, size_t c)
{
const char *p = NULL;
while (*psrc)
{
if(*psrc == c)
{
p = psrc;
}
psrc++;
}
if(p == NULL)
{
return NULL;
}
else
{
return (char *)p;
}
}
但是看了标准库strrchr函数的实现,发现strrchr函数是先遍历完源字符串,在倒着遍历找出最后那个匹配字串,我有个疑问就是如果源字符串第一个字符就是最后那个首字符与字符c,那不是来回遍历了两次,这样的话,效率上是不是有些问题。自己写的函数,遍历源字符串一次就可以了,但为什么标准库会采取这种方式实现呢,我想标准库这样实现一定是有它的道理的,经讨论,我觉得我的函数实现中当源字符串中与c匹配的字符很多的时候,我那个函数记录首字符位置的指针变量被反复赋值,导致效率上也会出现问题,也许是我的理解有误,希望高手能指点迷津! |
|