2009騰迅校園招聘筆試題:不使用中間變量求const字符串長度,即實現求字符串長度庫函數strlen函數。函數接口聲明如下:int strlen(const char *p);
思路分析:
“不使用中間變量”是說程序員不能顯式的申請內存,即不能有局部變量或者動態內存申請。如果函數自動申請棧內存或者使用寄存器存儲變量,或者使用立即數尋址即常量,那麼就相當於“不使用中間變量”。從函數原型看,返回值為int,那麼在函數內部必定需要一個地方存儲這個值,要麼是常數要麼是寄存器。長度不為1時不能一次就求出來,說明必須有遞歸調用,這樣遞歸時函數會自動申請棧內存,這樣就相當於程序員“不使用中間變量”了。中間返回的值通過寄存器自動保存,最後一次返回時拷貝到int中去。C++中也有臨時對象的概念,都是程序在運行過程中由編譯器在棧中自動申請的對象,對程序員不可見,也相當於“不使用中間變量”
這種問題都是利用常量,或者將變量的申請交給編譯器在遞歸過程中自動在棧中申請。
[cpp]
#include <iostream>
using namespace std;
int mystrlen(const char* str)
{
if(str==NULL)
return 0;
if(*str!='\0')
return 1+mystrlen(++str);
else
return 0;
}
void main()
{
char *str="Diaoyu islands belong to china";
cout<<mystrlen(str)<<endl;
}