一简单问题(高分)

elec001 2004-09-21 10:23:43
函数char *strrchr(char *s,char ch)的功能是在字符s中寻找字符ch,若ch出现在字符串s中,则返回最后一次出现时的位置,否则返回NULL。
答案是:
char *strrchr(char *s,char ch)
{char *p;
p=s+strlen(s);
while(--p>=s)
if(*p==ch) return p;
return NULL;
}

问题是 if(*p==ch) return p; 指针从后往前扫是一字符一个字符的扫 为什么*p==ch
我觉得*p只能等于h 为什么会等于2个字符。
请各位帮帮忙 谢谢
...全文
368 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
balancergh 2004-09-22
  • 打赏
  • 举报
回复
大家不要笑话啊,初学者都会有各种问题的。理解万岁!
shengbofun 2004-09-22
  • 打赏
  • 举报
回复
呵呵。大概是看错了。
block1956815 2004-09-21
  • 打赏
  • 举报
回复
楼上该说的都说了 不该说的也说了

楼主是该补补基础知识了~~~ -_-!
sss_624 2004-09-21
  • 打赏
  • 举报
回复
char *strrchr(char *s,char ch)
{
char *p=s;
char *pos = 0;
while(*p!='\0')
if(*p==ch)
pos = p;
return pos;
}
p是指针它指的变量要改变 因该
if(*p==ch)
pos=p;
else
p++;
idleguy 2004-09-21
  • 打赏
  • 举报
回复
这个贴子一定要留名,楼主厉害,哈哈,一时走眼了吧?呵呵……

char *strrchr(char *s,char ch)的定义,我觉得楼主给出的程序在时间复杂度上好像没问题。

记得《泛型编程与STL》这本书的最开始好像有个类似的程序。
daylove 2004-09-21
  • 打赏
  • 举报
回复
建议楼主和我一样多看看基础知识
daylove 2004-09-21
  • 打赏
  • 举报
回复
大哥,那个ch是个变量,楼上的都说了,赶快结帖吧,


而且这个问题的答案也有问题,主要是效率太低。

p=s+strlen(s);
大家注意这句话,strlen需要遍历字符串才能获得其长度。因此时间程序的复杂度更大了,好的解法是
char *strrchr(char *s,char ch)
{
char *p=s;
char *pos = 0;
while(*p!='\0')
if(*p==ch)
pos = p;
return pos;
}
------------------------------------------
其实他的想法是最优的
在字符出现在串后部的话
复杂度和你的是一样的
但是逻辑上就比你的更进了一步
一次比较成立即返回且不需要辅助变量存储(指针类型)

===========================================

同意!
goodluckyxl 2004-09-21
  • 打赏
  • 举报
回复
而且这个问题的答案也有问题,主要是效率太低。

p=s+strlen(s);
大家注意这句话,strlen需要遍历字符串才能获得其长度。因此时间程序的复杂度更大了,好的解法是
char *strrchr(char *s,char ch)
{
char *p=s;
char *pos = 0;
while(*p!='\0')
if(*p==ch)
pos = p;
return pos;
}
------------------------------------------
其实他的想法是最优的
在字符出现在串后部的话
复杂度和你的是一样的
但是逻辑上就比你的更进了一步
一次比较成立即返回且不需要辅助变量存储(指针类型)
pressman 2004-09-21
  • 打赏
  • 举报
回复
结帖吧!:)
ninansky 2004-09-21
  • 打赏
  • 举报
回复
偶尔的头脑混乱是难免会出现的,断续努力吧
hcj2002 2004-09-21
  • 打赏
  • 举报
回复
^_^

whamjohn 2004-09-21
  • 打赏
  • 举报
回复
hehe,fun!!!
pacman2000 2004-09-21
  • 打赏
  • 举报
回复
ch和'ch'完全是两回事啊。。。
oyd 2004-09-21
  • 打赏
  • 举报
回复
狂晕~~
收藏起来,以后编入笑话集
hewittlee 2004-09-21
  • 打赏
  • 举报
回复
up
Tycool 2004-09-21
  • 打赏
  • 举报
回复
楼主果真概念混沌阿,哈哈哈哈哈,鼓励鼓励,多多努力
tengfei2005 2004-09-21
  • 打赏
  • 举报
回复
I 服了,学习中........
coyprightbao 2004-09-21
  • 打赏
  • 举报
回复
mark!
北极猩猩 2004-09-21
  • 打赏
  • 举报
回复
真是晕。

而且这个问题的答案也有问题,主要是效率太低。

p=s+strlen(s);
大家注意这句话,strlen需要遍历字符串才能获得其长度。因此时间程序的复杂度更大了,好的解法是
char *strrchr(char *s,char ch)
{
char *p=s;
char *pos = 0;
while(*p!='\0')
if(*p==ch)
pos = p;
return pos;
}
shifan 2004-09-21
  • 打赏
  • 举报
回复
汗!
是变量ch不是字符串"ch"
加载更多回复(9)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧