程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 不使用中間變量實現strlen函數

不使用中間變量實現strlen函數

編輯:C++入門知識

2009騰迅校園招聘筆試題:不使用中間變量求const字符串長度,即實現求字符串長度庫函數strlen函數。函數接口聲明如下:int strlen(const char *p);
思路分析:
     “不使用中間變量”是說程序員不能顯式的申請內存,即不能有局部變量或者動態內存申請。如果函數自動申請棧內存或者使用寄存器存儲變量,或者使用立即數尋址即常量,那麼就相當於“不使用中間變量”。從函數原型看,返回值為int,那麼在函數內部必定需要一個地方存儲這個值,要麼是常數要麼是寄存器。長度不為1時不能一次就求出來,說明必須有遞歸調用,這樣遞歸時函數會自動申請棧內存,這樣就相當於程序員“不使用中間變量”了。中間返回的值通過寄存器自動保存,最後一次返回時拷貝到int中去。C++中也有臨時對象的概念,都是程序在運行過程中由編譯器在棧中自動申請的對象,對程序員不可見,也相當於“不使用中間變量”
        這種問題都是利用常量,或者將變量的申請交給編譯器在遞歸過程中自動在棧中申請。

[cpp]
#include <iostream> 
using namespace std; 
 
int mystrlen(const char* str) 

    if(str==NULL) 
        return 0; 
    if(*str!='\0') 
        return 1+mystrlen(++str); 
    else 
        return 0; 
 

 
void main() 

    char *str="Diaoyu islands belong to china"; 
    cout<<mystrlen(str)<<endl; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved