Q:把一个字符串转换为整数。

A1:一个普通但漏洞百出的解法。

int StrToInt(char* str)
{
int number = 0;
while (*str != 0)
{
number = number * 10 + *str - '0';
++str;
}
return number;
}

漏洞:没有考虑输入的字符串中是否有非数字字符或正负号或空格,并不能转换成整数时该如何错误处理;没有考虑溢出;如果传入是空指针,程序将崩溃,代码不够鲁棒。

A2:初级程序员的解法。

#include <iostream>
using namespace std; int StrToInt(const char* str)
{
int symbol = 1;
int number = 0;
//空指针
if (str == nullptr)
{
return 0;
}
//正负号
if (*str == '-')
{
symbol = -1;
++str;
}
while (*str != 0)
{
if (*str <= '9' && *str >= '0')
{
int temp = number * 10 + *str - '0';
if ((temp - (*str - '0')) / 10 != number)
{
//产生溢出
return 0;
}
number = number * 10 + *str - '0'; //利用位运算效率能高点 number = (number << 1) + (number << 3) + *str & 0xf;
++str;
//举个例子, 3 * 10 + 5 = 35, 如果(35 - 5) / 10不等于3,那么就产生了溢出
}
else
{
//存在异常字符
return 0;
}
}
return number*symbol;
} int main()
{
const char* str = "-10001252554354534";
cout << StrToInt(str) << endl;
return 0;
}

Q:求链表中的倒数第k个节点。

A:注意要考虑空指针,节点个数小于k,k=0等情况

struct ListNode
{
int val;
ListNode* next;
ListNode(int x) :val(x), next(nullptr) {}
}; ListNode* FindKthToTail(ListNode* head, unsigned int k)
{
//节点为空,或者k为0
if (head == nullptr || 0 == k)
{
return nullptr;
}
ListNode* pA = head;
ListNode* pB = head;
int nodeCnt = 0;
while (pA->next != nullptr)
{
++nodeCnt;
pA = pA->next;
}
//k大于节点数量
if (k > nodeCnt)
{
return nullptr;
}
pA = head;
for (unsigned int i = 0; i < k - 1; ++i)
{
pA = pA->next;
}
while (pA->next != nullptr)
{
pA = pA->next;
pB = pB->next;
}
return pB;
}

剑指offer 面试题0:高质的代码:即考虑边界条件、特殊输入和错误处理的更多相关文章

  1. 剑指offer 面试题0:扎实的基础:即编程语言、数据结构和算法

    编程语言: Q:如果写的函数需要传入一个指针,则是否需要为该指针加上const?把const加在指针不同的位置是否有区别? A:const是用来声明一个常量的,如果不想让一个值改变就应该加上const ...

  2. C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解

    剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...

  3. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  4. 剑指offer面试题3 二维数组中的查找(c)

    剑指offer面试题三:

  5. 剑指Offer——笔试题+知识点总结

    剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...

  6. C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告

    剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...

  7. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

  8. C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解

    剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...

  9. Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

    剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...

随机推荐

  1. 题解-Koishi Loves Construction

    题解-Koishi Loves Construction 前缀知识 质数 逆元 暴搜 Koishi Loves Construction 给定 \(X\),\(T\) 组测试数据,每次给一个 \(n\ ...

  2. 升级openssl和openssh版本

    一.安装telnet-server服务(建议安装) 1. 查看系统是否已安装telnet-server,linux系统上默认已经安装telnet-client(或telnet),而telnet-ser ...

  3. git 远端版本回退

    情景:本地更改推送远端后,想要回退到自己推送之前的某个版本. 比如想回退的分支为 test 分支. 风险:远端回退到某一版本后,之后的所有推送都没了(对应的日志记录也没了).如果是团队开发,不仅自己推 ...

  4. sql server添加单独新用户

  5. java、tomcat安装

    今天记录下如何安装java和tomcat,毕竟作为开发人员换电脑或重装系统后都是要装好这些环境的. java的安装: 1.下载sdk,官网地址:https://www.oracle.com/techn ...

  6. NSMutableArray 的实现原理

    一.普通C语言的数组实现: 是开辟一段连续的内存空间,缺点:在插入下标为0的元素,会移动其他所有元素.添加,插入,删除同理.           当数组非常大时,这样很快会成为问题.     二.OC ...

  7. proxySQL with MGR

    环境信息 hostname IP port role comm ms81 192.168.188.81 3399 master ms82 192.168.188.82 3399 slave ms83 ...

  8. 使用MDNS进行局域网服务发现(.NET Core)

    使用MDNS进行局域网服务发现(.NET Core) 想要服务写的好,配置文件不可少.如果是一个复杂的系统,甚至配置文件都是需要进行动态调整的,做起来好像就不是那么方便了,通常情况下,asp.net ...

  9. Restful规则及JPA导致内存溢出

    HTTP动词 对于资源的具体操作类型,由HTTP动词表示. 常用的HTTP动词有下面五个(括号里是对应的SQL命令). GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE ...

  10. css 12-CSS3属性详解:动画详解

    12-CSS3属性详解:动画详解 #前言 本文主要内容: 过渡:transition 2D 转换 transform 3D 转换 transform 动画:animation #过渡:transiti ...