勤&快

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

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

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

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

          思路:字符串以'\0'結尾,指針可以自加(p++)。既然不能使用臨時變量,那就用遞歸吧。雖然也使用了臨時空間,不過不是程序員自己申請的,而是系統(tǒng)申請的。
          判斷指針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
          主站蜘蛛池模板: 玉屏| 大宁县| 靖安县| 松原市| 嘉义县| 北京市| 常德市| 土默特右旗| 泰来县| 威信县| 临猗县| 博爱县| 木兰县| 义乌市| 丰顺县| 紫金县| 蒙阴县| 通渭县| 六盘水市| 张掖市| 集安市| 岳普湖县| 怀安县| 讷河市| 景泰县| 乐至县| 沂源县| 武川县| 蓝田县| 武隆县| 辽阳县| 泸州市| 东丽区| 常山县| 平昌县| 洛浦县| 邢台县| 灯塔市| 商河县| 阳谷县| 永丰县|