同学XX面试的一条简单面试题

 不定义任何变量, 求字符串长度

这是我的实现. 并写了一个定义变量的.各执行N次, 输出结果是, 没有定义变量的比定义变量的快....

 

  1. nt strlen(char* str)
  2. {
  3.     if (*(str) != '/0')
  4.         return strlen(++str) + 1;
  5.     else
  6.         return 0;
  7. }
  8. int strlen2(char* str)
  9. {
  10.     int i = 0;
  11.     while (*(str++) != '/0')
  12.         i++;
  13.     return i;
  14. }
  15. int _tmain(int argc, _TCHAR* argv[])
  16. {
  17.     int start = GetTickCount();
  18.     char* a = "aksjdlaaaccC";
  19.     for (int i = 0; i < 10000000; i+=1)
  20.     {
  21.         strlen(a);
  22.     }
  23.     int end = GetTickCount();
  24.     cout<<end - start<<endl;
  25.     start = GetTickCount();
  26.     for (int i = 0; i < 10000000; i+=1)
  27.     {
  28.         strlen2(a);
  29.     }
  30.     end = GetTickCount();
  31.     cout<<end - start<<endl;
  32.     
  33.     return 0;
  34. }

结果输出:

4527

1091

 

我试着把strlen2改成

  1. int strlen2(char* str)
  2. {
  3.     int i = 0;
  4.     while (*(str++) != '/0')
  5.         i++;
  6.     return i;
  7. }

4506

1062

 

本以为改了以后, 结果会有所改变, 因为我是操作指针而不是传入索引值. 原本我以为传入索引值会比操作指针慢, 但看来错了.

难道是i++??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值