欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

探討編寫int strlen(char *strDest);不允許定義變量的問題

 更新時(shí)間:2013年05月29日 09:10:49   作者:  
本篇文章是對(duì)編寫int strlen(char *strDest);不允許定義變量的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
在論壇上看到一位前輩當(dāng)年的面試題,原話是這樣說的“有一次在面試時(shí)遇到這樣一個(gè)問題:不允許調(diào)用庫(kù)函數(shù),也不允許使用任何全局或局部變量編寫 int strlen(char *strDest);  ”,無(wú)意中看到,自己想了一會(huì)兒,沒有思路,后來(lái)整理了各位牛人的回復(fù),覺得采用遞歸方法解決這個(gè)問題,是一種挺好的辦法!于是,稍微寫了一下代碼,算是開拓視野的一點(diǎn)點(diǎn)積累吧!
復(fù)制代碼 代碼如下:

#include "stdafx.h"
#include <iostream>
#include<assert.h>  //使用斷言assert的頭文件
using namespace std;
//普通的方法
int MyStrlen(const char* strDest)
{
 assert(NULL != strDest); //使用了斷言,如果strDest為Null,則終止程序
 int i(0);
 while ('\0' != *strDest)//判斷字符串結(jié)束的標(biāo)志,'\0'標(biāo)識(shí)符
 {
  i ++;
  strDest ++;
 }
 return i;
}
//采用遞歸方式,沒有定義新的全局變量和局部變量
int MyStrlen2(const char* strDest)
{
 assert(NULL != strDest);//使用了斷言,如果strDest為Null,則終止程序
 if ('\0' != *strDest)
 {
  return 1 + MyStrlen2(++strDest);
 }
 else
 {
  return 0;
 }
}
//和上面的方法類似,只不過采用的問號(hào)表達(dá)式
int MyStrlen3(const char* strDest)
{
 assert(NULL != strDest);//使用了斷言,如果strDest為Null,則終止程序
 return ('\0' != *strDest) ? (1 + MyStrlen3((++strDest))) : 0;  //這時(shí)候i++和++i的區(qū)別價(jià)值體現(xiàn)出來(lái)了,strDest++不行,考慮一下為何?
}
int _tmain(int argc, _TCHAR* argv[])
{
 char a[] = {"Hello World!"};
 cout << MyStrlen(a) << endl;
 cout << MyStrlen2(a) << endl;
 cout << MyStrlen3(a) << endl;
 return 0;
}

注意 :++strDest不能換成strDest++,  這時(shí)候i++和++i的區(qū)別價(jià)值體現(xiàn)出來(lái)了,strDest++不行,考慮一下為何?

相關(guān)文章

  • C++中typedef 及其與struct的結(jié)合使用

    C++中typedef 及其與struct的結(jié)合使用

    這篇文章主要介紹了C++中typedef 及其與struct的結(jié)合使用,需要的朋友可以參考下
    2014-02-02
  • C++實(shí)現(xiàn)LeetCode(43.字符串相乘)

    C++實(shí)現(xiàn)LeetCode(43.字符串相乘)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(43.字符串相乘),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 一文搞懂C++中繼承的概念與使用

    一文搞懂C++中繼承的概念與使用

    我們都知道面向?qū)ο笳Z(yǔ)言的三大特點(diǎn)是:**封裝,繼承,多態(tài)。**之前在類和對(duì)象部分,我們提到了C++中的封裝,那么今天呢,我們來(lái)學(xué)習(xí)一下C++中的繼承
    2022-07-07
  • C/C++標(biāo)準(zhǔn)庫(kù)之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間詳解

    C/C++標(biāo)準(zhǔn)庫(kù)之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間詳解

    最近遇到一個(gè)問題:數(shù)據(jù)庫(kù)中存放的時(shí)間為UTC時(shí)間,但是現(xiàn)在要求都出來(lái)顯示的時(shí)間為本地時(shí)間,所以就用C++實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于C/C++標(biāo)準(zhǔn)庫(kù)之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間的方法,還有C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)代碼,需要的朋友可以參考下。
    2017-11-11
  • C語(yǔ)言如何在字符數(shù)組中插入一個(gè)字符

    C語(yǔ)言如何在字符數(shù)組中插入一個(gè)字符

    這篇文章主要介紹了C語(yǔ)言如何在字符數(shù)組中插入一個(gè)字符,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vs2019安裝及簡(jiǎn)單處理技巧(超詳細(xì))

    vs2019安裝及簡(jiǎn)單處理技巧(超詳細(xì))

    這篇文章主要介紹了vs2019安裝及簡(jiǎn)單處理方法,本文是一篇非常詳細(xì)的教程,通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • C++數(shù)據(jù)結(jié)構(gòu)之AVL樹的實(shí)現(xiàn)

    C++數(shù)據(jù)結(jié)構(gòu)之AVL樹的實(shí)現(xiàn)

    AVL樹是高度平衡的而二叉樹,它的特點(diǎn)是AVL樹中任何節(jié)點(diǎn)的兩個(gè)子樹的高度最大差別為1,本文主要給大家介紹了C++如何實(shí)現(xiàn)AVL樹,需要的朋友可以參考下
    2022-06-06
  • C語(yǔ)言宏定義使用分析

    C語(yǔ)言宏定義使用分析

    在宏定義中,“宏名稱”和“宏字符串”是通過“空格”來(lái)區(qū)分的,某些朋友不要混淆了,接下來(lái)請(qǐng)祥看本文
    2012-12-12
  • C語(yǔ)言程序如何求學(xué)生總成績(jī)和平均成績(jī)

    C語(yǔ)言程序如何求學(xué)生總成績(jī)和平均成績(jī)

    這篇文章主要介紹了C語(yǔ)言程序如何求學(xué)生總成績(jī)和平均成績(jī),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++之string類對(duì)象的容量操作詳解

    C++之string類對(duì)象的容量操作詳解

    通過在網(wǎng)站上的資料搜集,得到了很多關(guān)于string類對(duì)象的容量操作,通過對(duì)這些資料的整理和加入一些自己的代碼,希望能夠給你帶來(lái)幫助
    2021-08-08

最新評(píng)論