勤&快

          問題其實就是你期望的東西和你體驗的東西之間的差別
          隨筆 - 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
          主站蜘蛛池模板: 神农架林区| 苏州市| 南岸区| 昭苏县| 马龙县| 兰州市| 贡觉县| 泽库县| 陈巴尔虎旗| 天峻县| 营口市| 都昌县| 德兴市| 田东县| 郸城县| 青铜峡市| 南通市| 衢州市| 开鲁县| 凉山| 丹棱县| 武冈市| 营口市| 申扎县| 太仓市| 日喀则市| 长沙县| 中西区| 嘉禾县| 禄劝| 黄石市| 鱼台县| 论坛| 横峰县| 乡城县| 祥云县| 温泉县| 武平县| 永康市| 平陆县| 临安市|