这两个函数有什么区别?

hzwjt 2006-06-05 10:10:43
第一个函数如下:
while (*str)
{
if (*str & 0x80) {
c = (*str&0xFF) | (*(str+1)&0xFF)<<8;
if (c == (unsigned int)cha)
return str;
else
str += 2;
}
else
{
c = *str;
if (c == (unsigned int)(cha&0xff))
return str;
else
str++;
}

}
/////////////////////////////////////////////////////////////////////////////////
第二个函数如下:
for(int i=0;str[i]!='\0';i++)
{
if (str[i] & 0x80)
{
c =( str[i] &0xFF) | ( str[i+1] &0xFF)<<8;
if (c == (unsigned int)cha)
return str+i;
else
i += 2;
}
else
{
c = str[i];

if (c == (unsigned int)(cha&0xff))
return str+i;
else
str++;
}
}
...全文
211 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2006-06-05
  • 打赏
  • 举报
回复
第二个函数修改如下也和第一个函数一致:
for(int i=0;str[i]!='\0';i++)
{
if (str[i] & 0x80)
{
c =( str[i] &0xFF) | ( str[i+1] &0xFF)<<8;
if (c == (unsigned int)cha)
return str+i;
else
i ++;
}
else
{
c = str[i];

if (c == (unsigned int)(cha&0xff))
return str+i;
//这里的else就没有必要了 ...
}
}
lj860603 2006-06-05
  • 打赏
  • 举报
回复
for( int i=0; str[i]!='\0'; ;)

ls人云亦云!!
--------------------------
偶学识浅薄,以为后面多加了一个分号,并非人云亦云,说错了的地方请大家指正:)
对于上面这个问题,还请chenhu_doc(Plan equals power! 越来越像个废物!) 帮忙指正,
谢谢:)
chenhu_doc 2006-06-05
  • 打赏
  • 举报
回复
for( int i=0; str[i]!='\0'; ;)

ls人云亦云!!
lj860603 2006-06-05
  • 打赏
  • 举报
回复
for(int i=0;str[i]!='\0';;)
这样也行?
----------------
天涯应该是打错了。多了一个分号。。
MagicCarmack 2006-06-05
  • 打赏
  • 举报
回复
for(int i=0;str[i]!='\0';;)
这样也行?
lj860603 2006-06-05
  • 打赏
  • 举报
回复
for(int i=0;str[i]!='\0';i++) 这个函数每次循环总比 while (*str)那个快一步。
改成for(int i=0;str[i]!='\0';;)就一样了。
----------------------
在这里应该是一样的。for循环里的'i++'其实在while循环里也是一样存在的。下标引用和指针的移动在这种情况下其实差不多。while循环里*(str++)和*(str+(i++))是一样的。

另外,一般情况下for和while的效率应该差不多,for循环是while循环的一种简写法,这一点可以用实例验证一下就知道。如果两者的效率出现了差异,那么也许就是在循环里出现了continue语句。在for循环里continue语句跳过循环内的剩余语句直接到调整部分,而while循环里continue语句连调整部分都跳过了,所以相对来说效率会高点。
ywhbn 2006-06-05
  • 打赏
  • 举报
回复
for(int i=0;str[i]!='\0';i++) 这个函数每次循环总比 while (*str)那个快一步。
改成for(int i=0;str[i]!='\0';;)就一样了。

另外
if (c == (unsigned int)(cha&0xff))
return str+i;
else
str++; <-- 这里是笔误吧,应该是i++ ?

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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