勤&快

          問題其實就是你期望的東西和你體驗的東西之間的差別
          隨筆 - 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 閱讀(1401) 評論(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
          主站蜘蛛池模板: 忻州市| 德化县| 阳春市| 吉木萨尔县| 分宜县| 龙海市| 个旧市| 胶南市| 新丰县| 西乡县| 温州市| 韶关市| 隆安县| 喀喇| 阿图什市| 社旗县| 眉山市| 衡山县| 叙永县| 成武县| 新安县| 福清市| 务川| 聂拉木县| 陆河县| 达拉特旗| 新疆| 中江县| 昌黎县| 文山县| 蕲春县| 苏州市| 乐至县| 青铜峡市| 双峰县| 呼和浩特市| 重庆市| 会宁县| 宝应县| 蛟河市| 广宁县|