题目:
编写一个函数,输入一个string型参数,返回该string的逆序字符串。
比如:传入 "abcde",函数返回"edcba"
以下提供自己想的一种方法,欢迎各位有好的方法提出来:
#include<iostream.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)
这种方法也能实现两个变量值的相互交换,但是这种方法有个缺点:不能实现小数的交换,这种方法如果在非小数的情况下,倒是一种不错的选择。
|