您的位置:首页 > 职场人生

0909滴滴面试小结

2016-09-09 16:47 423 查看
近期的第一场面试,一言以蔽之:“准备的都没问,问的刚好💔”,不是太难,还是复习的不全面,打击才刚刚开始,越挫越奋,加油!

1.自我介绍,聊了一会项目

2.拷贝构造函数(浅拷贝和深拷贝)

这个问题,C++拷贝构造函数详解一文讲得比较清楚了,基本上和c++ primer plus中相关部分差不多,值得一瞧!

又顺带问了下c++里的动态内存分配,这也是个经典的老问题了。

4.atoi(即 alphanumeric to integer)函数的实现

再常见不过的题,很久之前在leetcode上刷过此题(参见:),不过全程使用string。很久没做,今天要求使用原型的形式:int atoi(const char *nptr),还有点想不起来,做的不太好,考虑不全(💔)!!

注意的点:

1.字符串所表示数字的正负号

2.结束条件:遇到非数字或者结束符‘\0’

3.考虑字符串前的空白,直到遇到数字或正负号才开始转换

4.判断是否溢出:分别与int表示的最大值和最小值比较,根据正负返回INT_MAX和INT_MIN

5.如果字符串不含有效参数,如:全是空格或字母等,返回0

#include<iostream>

int atoi(const char *str) {
if(str == NULL || strlen(str) <=0)
return 0;
bool negative = false;
while(*str == ' ') ++str;
if(*str == '-'){
negative = true;
++str;
}
if(*str == '+') ++str;

long long res = 0;
while(*str!='\0'){
if( *str>='0' && *str<='9') {
res = res*10 + *str - '0';
} else {
break;
}
++str;
}
res = negative ? -res : res;

if(res>INT_MAX) return INT_MAX;
else if(res<INT_MIN) return INT_MIN;
else return res;
}

int main(){
//注意输入,char *str里str只是一个字符串指针,只是存储一个字符串指针变量,要想用cin输入字符串,必须声明字符数组。
char* str;
char a[20];
str=a;

/*循环输入
while(std::cin>>str){
int res=atoi(str);
std::cout<<res<<std::endl;
}
*/
std::cin>>str;
int res=atoi(str);
std::cout<<res<<std::endl;

return 0;
}


还可参考下:http://blog.csdn.net/feliciafay/article/details/17111231

判断溢出时如果先不加符号,可以这么写(当然还是上面的简洁):

if(negative && res > INT_MAX+1LL){
return INT_MIN;
}
else if(!negative && res > INT_MAX){
return INT_MAX;
}


顺便谈下Sizeof与Strlen的区别吧:

各种输入的形式:

C++ 输入函数getline(cin,str) 与cin.getline(str,int)区别

拓展: char*,const char*和string 三者转换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: