正确的做法是

来源: 兄贵 2022-08-31 12:06:23 [] [博客] [旧帖] [给我悄悄话] 本文已被阅读: 0 次 (343 bytes)
回答: 神课 cs50 live 刚刚在线开课了兄贵2022-08-31 11:34:33

C的本质,和C++不同,C对string没有特殊的处理。C++的string,比较长度是存在object里面的。也是有始点,终点的。而C没有。所以,不能每次loop都对string来计算长度,那样,成本巨大。

应该是

for(int i=0, n=strlen(s)+1; i<n; i++)
{...}

所有跟帖: 

LOL, you certainly showed Harvard it sucks -tibuko- 给 tibuko 发送悄悄话 tibuko 的博客首页 (177 bytes) () 08/31/2022 postreply 12:22:31

compiler會optimized吧 -violinpiano- 给 violinpiano 发送悄悄话 (0 bytes) () 08/31/2022 postreply 12:45:24

不会,如果在竞赛中 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (240 bytes) () 08/31/2022 postreply 12:52:27

现在的compile应该会。s是local变量,而且在loop里没变化。 -ccb168- 给 ccb168 发送悄悄话 (0 bytes) () 08/31/2022 postreply 13:05:00

什么编译器? 贴一下您的测试结果,好吗 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 08/31/2022 postreply 13:41:26

try -O2 with gcc -ccb168- 给 ccb168 发送悄悄话 (0 bytes) () 08/31/2022 postreply 15:10:00

应该不会优化,这是memory access,完全可能有别的在改memory -avw- 给 avw 发送悄悄话 (0 bytes) () 08/31/2022 postreply 13:19:31

笑死人了,人家教授后来在问 i 小于strlen(s)有什么值得优化 -kevin2018- 给 kevin2018 发送悄悄话 (177 bytes) () 08/31/2022 postreply 13:13:18

没看到最后 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 08/31/2022 postreply 13:38:37

请您先登陆,再发跟帖!

发现Adblock插件

如要继续浏览
请支持本站 请务必在本站关闭/移除任何Adblock

关闭Adblock后 请点击

请参考如何关闭Adblock/Adblock plus

安装Adblock plus用户请点击浏览器图标
选择“Disable on www.wenxuecity.com”

安装Adblock用户请点击图标
选择“don't run on pages on this domain”