探討編寫int strlen(char *strDest);不允許定義變量的問題
在論壇上看到一位前輩當年的面試題,原話是這樣說的“有一次在面試時遇到這樣一個問題:不允許調用庫函數(shù),也不允許使用任何全局或局部變量編寫 int strlen(char *strDest); ”,無意中看到,自己想了一會兒,沒有思路,后來整理了各位牛人的回復,覺得采用遞歸方法解決這個問題,是一種挺好的辦法!于是,稍微寫了一下代碼,算是開拓視野的一點點積累吧!
#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的區(qū)別價值體現(xiàn)出來了,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;
}
注意 :++strDest不能換成strDest++, 這時候i++和++i的區(qū)別價值體現(xiàn)出來了,strDest++不行,考慮一下為何?
欄 目:C語言
下一篇:C字符串與C++字符串的深入理解
本文標題:探討編寫int strlen(char *strDest);不允許定義變量的問題
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/4400.html
您可能感興趣的文章
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 01-10基于C語言sprintf函數(shù)的深入理解
- 01-10深入探討C語言中局部變量與全局變量在內存中的存放位置
- 01-10深入探討linux下進程的最大線程數(shù)、進程最大數(shù)、進程打開的文
- 01-10深入探討Linux靜態(tài)庫與動態(tài)庫的詳解(一看就懂)
- 01-10Linux下semop等待信號時出現(xiàn)Interrupted System Call錯誤(EINTR)解決方法
- 01-10基于c中使用ftruncate()前需要fflush(),使用后需要rewind()的深入探討
- 01-10用32位int型變量表示單引號括起來的四個字符的深入探討
- 01-10深入分析C中不安全的sprintf與strcpy
- 01-10深入探討:宏、內聯(lián)函數(shù)與普通函數(shù)的區(qū)別


閱讀排行
本欄相關
- 04-02c語言函數(shù)調用后清空內存 c語言調用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調用函數(shù)求fibo C語言調用函數(shù)求
隨機閱讀
- 01-11ajax實現(xiàn)頁面的局部加載
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實例總結
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 08-05DEDE織夢data目錄下的sessions文件夾有什