您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记序列之面试题目

2011-08-03 16:14 357 查看
题目:

编写一个函数,输入一个string型参数,返回该string的逆序字符串。

比如:传入 "abcde",函数返回"edcba"

以下提供自己想的一种方法,欢迎各位有好的方法提出来:

#include<iostream.h>

#include<malloc.h>

#include<string.h>

#include<assert.h>

char* reverStr(char *p);

int main()

{

char* result=NULL;

char str[]="abcde";

result=reverStr(str);

cout<<result<<endl;

free(result); //注意释放掉动态分配的内存空间

return 0;

}

char* reverStr(char *p)

{

assert(p);

char* q=NULL;

int len=strlen(p)+1;

int i=0;

q=(char*)malloc(sizeof(char)*len);

while((len--)>0)

{

*(q+i)=*(p+len-1);

i++;

}

*(q+i-1)='\0';

return q;

}

2.请问下面的程序输出结果是什么呢?(华为面试题目)

int main(void)
{
unsigned int a=0Xfffffff7;
char
*b = (char*)&a;
printf("%08x",*b);
}
分析:这个问题主要是考虑计算机大端小端存储的问题,a存储的就是0xfffffff7这个值,虽然这个值是地址,如果计算机是大端存储的话,那么b指针存储的内容就是f7,那么答应出来的就是f7ffffff;如果是小端存储,那么b存储的内容就是ff,那么答应出来的就是fffffff7。

3.不用局部变量和全局变量实现strlen;
分析:用递归来实现实在是一种不错的方法,但是在很长的字符串,效率会相对较慢,其他的方法暂时也没想到,有的对大家可以补充啊。。。
int myStrLen(const char *str)

{

if(*str=='\0')

return 0;

else return myStrLen(++str)+1;

}

4.有2数据,写一个交换数据的宏;
分析:有两种方法
方法一、
#define SWAPP(A,B) (A)=(A)+(B);(B)=(A)-(B);(A)=(A)-(B);
这种方法的宏定义会导致溢出,溢出的情况是:当A是int行,而B是short型,而A的值又大于256,就会产生溢出,但是这种方法能实现小数的交换,但是会产生精度缺失。
方法二、
#define SWAPP2(A,B) (A)^=(B)^=(A)^=(B)
这种方法也能实现两个变量值的相互交换,但是这种方法有个缺点:不能实现小数的交换,这种方法如果在非小数的情况下,倒是一种不错的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: