当前位置: 首页 > news >正文

0909滴滴面试小结

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

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_MAXINT_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 三者转换

 

转载于:https://www.cnblogs.com/carsonzhu/p/5857236.html

相关文章:

  • Mongodb 利用mongoshell进行数据类型转换
  • pom.xml标签以及maven在Idea使用
  • Android 样式和主题(style theme)
  • Linux作业7
  • 判断终端是ios还是安卓的一些妙用(附加微信分享图标修改)
  • 4: Accessing Environment Variables(Working with programs)
  • flat network 原理与配置 - 每天5分钟玩转 OpenStack(86)
  • 4 张 GIF 图帮助你理解二叉查找树
  • linux目录结构详细介绍
  • Android EditText光标位置(定位到最后)
  • 深刻理解Python中的元类(metaclass)
  • c++中类对象的内存对齐
  • Significance Testing
  • 延迟脚本的方式
  • shell中变量的查看和删除
  • 11111111
  • CEF与代理
  • HashMap ConcurrentHashMap
  • IDEA常用插件整理
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • laravel5.5 视图共享数据
  • maven工程打包jar以及java jar命令的classpath使用
  • Python利用正则抓取网页内容保存到本地
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 反思总结然后整装待发
  • 仿天猫超市收藏抛物线动画工具库
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于springcloud Gateway中的限流
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 记一次和乔布斯合作最难忘的经历
  • 使用 Docker 部署 Spring Boot项目
  • 网络应用优化——时延与带宽
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 移动端唤起键盘时取消position:fixed定位
  • hi-nginx-1.3.4编译安装
  • puppet连载22:define用法
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #Linux(权限管理)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (4)事件处理——(7)简单事件(Simple events)
  • (MATLAB)第五章-矩阵运算
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)windows配置JDK环境
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (一)u-boot-nand.bin的下载
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .Net Core和.Net Standard直观理解