不使用中间变量实现strlen函数
2014-07-02 17:38
239 查看
2009腾迅校园招聘笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数。函数接口声明如下:int strlen(const char *p);
思路分析:
“不使用中间变量”是说程序员不能显式的申请内存,即不能有局部变量或者动态内存申请。如果函数自动申请栈内存或者使用寄存器存储变量,或者使用立即数寻址即常量,那么就相当于“不使用中间变量”。从函数原型看,返回值为int,那么在函数内部必定需要一个地方存储这个值,要么是常数要么是寄存器。长度不为1时不能一次就求出来,说明必须有递归调用,这样递归时函数会自动申请栈内存,这样就相当于程序员“不使用中间变量”了。中间返回的值通过寄存器自动保存,最后一次返回时拷贝到int中去。C++中也有临时对象的概念,都是程序在运行过程中由编译器在栈中自动申请的对象,对程序员不可见,也相当于“不使用中间变量”
另外一个不申请任何变量的典型题目是:反转字符串(http://blog.csdn.net/sailor_8318/archive/2008/10/11/3058240.aspx)
这种问题都是利用常量,或者将变量的申请交给编译器在递归过程中自动在栈中申请。
思路分析:
“不使用中间变量”是说程序员不能显式的申请内存,即不能有局部变量或者动态内存申请。如果函数自动申请栈内存或者使用寄存器存储变量,或者使用立即数寻址即常量,那么就相当于“不使用中间变量”。从函数原型看,返回值为int,那么在函数内部必定需要一个地方存储这个值,要么是常数要么是寄存器。长度不为1时不能一次就求出来,说明必须有递归调用,这样递归时函数会自动申请栈内存,这样就相当于程序员“不使用中间变量”了。中间返回的值通过寄存器自动保存,最后一次返回时拷贝到int中去。C++中也有临时对象的概念,都是程序在运行过程中由编译器在栈中自动申请的对象,对程序员不可见,也相当于“不使用中间变量”
另外一个不申请任何变量的典型题目是:反转字符串(http://blog.csdn.net/sailor_8318/archive/2008/10/11/3058240.aspx)
这种问题都是利用常量,或者将变量的申请交给编译器在递归过程中自动在栈中申请。
#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; }源地址:http://blog.csdn.net/cxllyg/article/details/8000051
相关文章推荐
- 不使用中间变量实现strlen函数
- 不使用任何中间变量实现strlen
- 每日一题 -- 不使用变量实现c语言的strlen函数
- 笔试题: 不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数
- 不使用任何中间变量实现strlen
- 实现两个int类型变量值的交换,要求不使用中间变量
- C/C++面试之算法系列--借刀杀人,不使用任何中间变量实现strlen
- 不使用中间变量实现字符串反转
- 不使用库函数和变量,实现Strlen函数
- 不使用中间变量实现两个变量的交换
- Java-实现两个int类型变量值的交换,要求不使用中间变量
- 每日一题 -- 不使用变量实现c语言的strlen函数
- 借刀杀人,不使用任何中间变量实现strlen
- 不使用任何中间变量实现strlen
- 不使用中间变量实现变量交换
- 不使用中间变量实现数据交换
- 不用中间变量实现strlen函数
- 不使用中间变量实现两个数的交换
- 实现strlen的功能【不可以使用strlen函数】
- 程序员面试宝典—不使用中间变量实现交换