勤&快

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

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

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

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

          思路:字符串以'\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(*== '\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: 不使用任何中間變量計算一個字符串的長度  回復(fù)  更多評論   

          這個問題實在是沒意思。
          不過按照你的說法,只要不是自己申請的空間就可以,那么還有一個更加省時間省空間的方法:
          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
          主站蜘蛛池模板: 天峻县| 肃南| 万盛区| 苏尼特左旗| 土默特左旗| 鹰潭市| 呼图壁县| 子洲县| 荥经县| 中西区| 正蓝旗| 新化县| 灵台县| 台湾省| 磴口县| 达日县| 关岭| 剑河县| 信阳市| 资兴市| 松阳县| 维西| 民勤县| 始兴县| 太原市| 巧家县| 敖汉旗| 永靖县| 邵东县| 杭锦旗| 新密市| 大化| 陆河县| 西吉县| 东山县| 福鼎市| 遂平县| 揭西县| 监利县| 望谟县| 丘北县|