不使用任何中間變量計算一個字符串的長度
一個朋友去面試時候被問到這個題目。回來的時候大家討論。
輸入是一個指向字符串指針,要求不能用任何中間變量,計算出這個字符串的長度。
思路:字符串以'\0'結尾,指針可以自加(p++)。既然不能使用臨時變量,那就用遞歸吧。雖然也使用了臨時空間,不過不是程序員自己申請的,而是系統申請的。
判斷指針p所指位置的值是否為'\0',如果是,結束函數,返回0。如果不是,說明字符串沒有結束,p++,然后再調用判斷p的值,并返回結果加1。
流程:
function(char* p)
if (*p == '\0')
return 0;
else
return function(++p) + 1;
用C++實現的代碼如下
輸入是一個指向字符串指針,要求不能用任何中間變量,計算出這個字符串的長度。
思路:字符串以'\0'結尾,指針可以自加(p++)。既然不能使用臨時變量,那就用遞歸吧。雖然也使用了臨時空間,不過不是程序員自己申請的,而是系統申請的。
判斷指針p所指位置的值是否為'\0',如果是,結束函數,返回0。如果不是,說明字符串沒有結束,p++,然后再調用判斷p的值,并返回結果加1。
流程:
function(char* p)
if (*p == '\0')
return 0;
else
return function(++p) + 1;
用C++實現的代碼如下
#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