欢迎来到天天文库
浏览记录
ID:1670608
大小:64.00 KB
页数:11页
时间:2017-11-13
《总结网上转载面试题》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、1.C/C++最近这段时间忙于笔试、面试,没时间做总结。把碰到的几个有些疑问的东西拿出来分享一下。1,如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。(华赛面试题、腾讯笔试题)刚开始是去华赛面试时,面试官把这个题拿出来问我,我看了半天,没明白什么意思,考官说用一个很简单的表达式表示出来,楞了半天,还是不明白什么意思。当时面试官也没说答案,昨天去腾讯笔试,又碰到了这个题。后来网上查了下,自己又仔细想了想。这个题分两种
2、情况,一种是rear>front,此时n=rear-front+1;由于是循环队列,如果是rear3、是参数类型、参数个数不一样就能构成函数的重载呀!!!这个是个自己记错了,以为函数返回值不一样也能构成重载,其实如果只是函数返回值不一样的话,编译器不能确认去匹配哪一个函数,编译就会出现错误。3.宏的问题(MTK一道笔试题)#definecall(x,y)x##yintx=10,y=5,xy=30;求x+y+call(x,y)当时就晕了,不懂哇,其实以前见过这种##的,当时完全记不得了,不牢固哇。其实x##y就是xy,所以这个题答案应该是:452.字符串提取数字完成函数voidtake_num(constchar*strIn,int*n4、,unsignedint*outArray)如输入strIn="ab00cd+123fght456-25 3.005fgh"输出n=6outArray={0,123,456,25,3,5}不考虑小数如3.005输出3和5题目分析:将字符串转换成uint,按公式temp=0;temp=temp*10;temp+=str[i]-'0';一直循环。对于一个数,如果前面是0的话,那么按上面公式也会把0去掉的,也就是会从第一个非零的数开始计数。比如005,temp=0;temp=temp*10(temp=0);temp+=str[i]-'0'5、(temp=0);当i=i+1时,按上面过程计算,仍然有temp=0,直到第一个非零的数字出现,这也正符合数的形式。[cpp]viewplaincopy1.#include 2.#include 3.#include 4.void take_num(const char *strIn, int *n, unsigned int *outArray) 5.{ 6. assert(strIn!=NULL && n!=NULL && outArray!=NULL6、); 1. int nCount=0; 2. int lent=strlen(strIn); 3. int temp=0; 4. bool IsNum=false; 5. for (int i=0;i='0'&& strIn[i]<='9') 8. { 9. IsNum=true; 10. temp=temp*10; 11. 7、 temp+=strIn[i]-'0'; 12. } 13. else 14. if (IsNum) 15. { 16. outArray[nCount]=temp; 17. nCount++; 18. IsNum=false; 19. temp=0; 20. } 21. } 22. if8、 (IsNum) ///////一定要对最后一个进行判断,否则就会丢失最后一个数的信心 23. { 24. outArray[nCount]=temp; 25. nCount+
3、是参数类型、参数个数不一样就能构成函数的重载呀!!!这个是个自己记错了,以为函数返回值不一样也能构成重载,其实如果只是函数返回值不一样的话,编译器不能确认去匹配哪一个函数,编译就会出现错误。3.宏的问题(MTK一道笔试题)#definecall(x,y)x##yintx=10,y=5,xy=30;求x+y+call(x,y)当时就晕了,不懂哇,其实以前见过这种##的,当时完全记不得了,不牢固哇。其实x##y就是xy,所以这个题答案应该是:452.字符串提取数字完成函数voidtake_num(constchar*strIn,int*n
4、,unsignedint*outArray)如输入strIn="ab00cd+123fght456-25 3.005fgh"输出n=6outArray={0,123,456,25,3,5}不考虑小数如3.005输出3和5题目分析:将字符串转换成uint,按公式temp=0;temp=temp*10;temp+=str[i]-'0';一直循环。对于一个数,如果前面是0的话,那么按上面公式也会把0去掉的,也就是会从第一个非零的数开始计数。比如005,temp=0;temp=temp*10(temp=0);temp+=str[i]-'0'
5、(temp=0);当i=i+1时,按上面过程计算,仍然有temp=0,直到第一个非零的数字出现,这也正符合数的形式。[cpp]viewplaincopy1.#include 2.#include 3.#include 4.void take_num(const char *strIn, int *n, unsigned int *outArray) 5.{ 6. assert(strIn!=NULL && n!=NULL && outArray!=NULL
6、); 1. int nCount=0; 2. int lent=strlen(strIn); 3. int temp=0; 4. bool IsNum=false; 5. for (int i=0;i='0'&& strIn[i]<='9') 8. { 9. IsNum=true; 10. temp=temp*10; 11.
7、 temp+=strIn[i]-'0'; 12. } 13. else 14. if (IsNum) 15. { 16. outArray[nCount]=temp; 17. nCount++; 18. IsNum=false; 19. temp=0; 20. } 21. } 22. if
8、 (IsNum) ///////一定要对最后一个进行判断,否则就会丢失最后一个数的信心 23. { 24. outArray[nCount]=temp; 25. nCount+
此文档下载收益归作者所有