不使用任何中間變量計算一個字符串的長度
一個朋友去面試時候被問到這個題目。回來的時候大家討論。
輸入是一個指向字符串指針,要求不能用任何中間變量,計算出這個字符串的長度。
思路:字符串以'\0'結(jié)尾,指針可以自加(p++)。既然不能使用臨時變量,那就用遞歸吧。雖然也使用了臨時空間,不過不是程序員自己申請的,而是系統(tǒng)申請的。
判斷指針p所指位置的值是否為'\0',如果是,結(jié)束函數(shù),返回0。如果不是,說明字符串沒有結(jié)束,p++,然后再調(diào)用判斷p的值,并返回結(jié)果加1。
流程:
function(char* p)
if (*p == '\0')
return 0;
else
return function(++p) + 1;
用C++實現(xiàn)的代碼如下
輸入是一個指向字符串指針,要求不能用任何中間變量,計算出這個字符串的長度。
思路:字符串以'\0'結(jié)尾,指針可以自加(p++)。既然不能使用臨時變量,那就用遞歸吧。雖然也使用了臨時空間,不過不是程序員自己申請的,而是系統(tǒng)申請的。
判斷指針p所指位置的值是否為'\0',如果是,結(jié)束函數(shù),返回0。如果不是,說明字符串沒有結(jié)束,p++,然后再調(diào)用判斷p的值,并返回結(jié)果加1。
流程:
function(char* p)
if (*p == '\0')
return 0;
else
return function(++p) + 1;
用C++實現(xiàn)的代碼如下
#include <iostream>
//compute Lenght Of String Without Any Other Variable
using namespace std;
int len(char a[])
{
if(*a == '\0')
{
return 0;
}
else
{
return len(++a) + 1;
}
}
int main()
{
char a[] = "hello";
int i = len(a);
cout << "len: " << i << endl;
getchar();
return 0;
}
//compute Lenght Of String Without Any Other Variable
using namespace std;
int len(char a[])
{
if(*a == '\0')
{
return 0;
}
else
{
return len(++a) + 1;
}
}
int main()
{
char a[] = "hello";
int i = len(a);
cout << "len: " << i << endl;
getchar();
return 0;
}
posted on 2007-04-23 11:35 daning 閱讀(1401) 評論(1) 編輯 收藏 所屬分類: others