勤&快

          問題其實就是你期望的東西和你體驗的東西之間的差別
          隨筆 - 55, 文章 - 0, 評論 - 68, 引用 - 0
          數據加載中……

          不使用任何中間變量計算一個字符串的長度

          一個朋友去面試時候被問到這個題目。回來的時候大家討論。

          輸入是一個指向字符串指針,要求不能用任何中間變量,計算出這個字符串的長度。

          思路:字符串以'\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(*== '\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 閱讀(1405) 評論(1)  編輯  收藏 所屬分類: others

          評論

          # re: 不使用任何中間變量計算一個字符串的長度  回復  更多評論   

          這個問題實在是沒意思。
          不過按照你的說法,只要不是自己申請的空間就可以,那么還有一個更加省時間省空間的方法:
          int lenimpl(char *a, char* t) {
          while (*t) ++t;
          return t-a;
          }
          int len(char *a) {
          if (a == NULL)
          return 0;
          else
          return lenimpl(a,a);
          }
          2011-05-21 09:57 | ff434234
          主站蜘蛛池模板: 广宁县| 银川市| 桐城市| 平远县| 洛宁县| 兰西县| 宁远县| 南平市| 蓬溪县| 车险| 黑河市| 县级市| 上虞市| 叙永县| 深水埗区| 娄烦县| 临夏市| 杭州市| 厦门市| 建湖县| 大宁县| 邯郸市| 青铜峡市| 武乡县| 甘谷县| 思南县| 城口县| 五大连池市| 彭山县| 遂平县| 乌拉特后旗| 甘肃省| 武陟县| 琼结县| 新巴尔虎左旗| 双柏县| 右玉县| 凌海市| 南平市| 陆川县| 新丰县|