源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

探讨编写int strlen(char *strDest);不允许定义变量的问题

  • 时间:2020-09-18 15:19 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:探讨编写int strlen(char *strDest);不允许定义变量的问题
在论坛上看到一位前辈当年的面试题,原话是这样说的[b]“有一次在面试时遇到这样一个问题:不允许调用库函数,也不允许使用任何全局或局部变量编写 int strlen(char *strDest);  ”[/b],无意中看到,自己想了一会儿,没有思路,后来整理了各位牛人的回复,觉得采用递归方法解决这个问题,是一种挺好的办法!于是,稍微写了一下代码,算是开拓视野的一点点积累吧!
[u]复制代码[/u] 代码如下:
#include "stdafx.h" #include <iostream> #include<assert.h>  //使用断言assert的头文件 using namespace std; //普通的方法 int MyStrlen(const char* strDest) {  assert(NULL != strDest); //使用了断言,如果strDest为Null,则终止程序  int i(0);  while ('\0' != *strDest)//判断字符串结束的标志,'\0'标识符  {   i ++;   strDest ++;  }  return i; } //采用递归方式,没有定义新的全局变量和局部变量 int MyStrlen2(const char* strDest) {  assert(NULL != strDest);//使用了断言,如果strDest为Null,则终止程序  if ('\0' != *strDest)  {   return 1 + MyStrlen2(++strDest);  }  else  {   return 0;  } } //和上面的方法类似,只不过采用的问号表达式 int MyStrlen3(const char* strDest) {  assert(NULL != strDest);//使用了断言,如果strDest为Null,则终止程序  return ('\0' != *strDest) ? (1 + MyStrlen3((++strDest))) : 0;  //这时候i++和++i的区别价值体现出来了,strDest++不行,考虑一下为何? } int _tmain(int argc, _TCHAR* argv[]) {  char a[] = {"Hello World!"};  cout << MyStrlen(a) << endl;  cout << MyStrlen2(a) << endl;  cout << MyStrlen3(a) << endl;  return 0; }
[b]注意[/b] :++strDest不能换成strDest++,  这时候i++和++i的区别价值体现出来了,strDest++不行,考虑一下为何?
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部