经典面试题:实现atoi函数

summary

:

这是千年老题,看起来简单,要考虑的问题非常多。

题目

写一个函数atoi,把字符串转化成整数。

分析

转成整数不难,从头遍历,比如字符串1234,求整数的过程为:

result = (((0 * 10 + 1) * 10 + 2) * 10 + 3) * 10 + 4

关键是要考虑特殊情况。 * 传入的字符串头指针为空 * 传入的字符串为空 * 传入的字符串有非数字字符 * 负数 * 溢出

目前,我的处理是,除了负数之外的特殊情况都打印错误信息,异常退出。负数则先按正数 处理,返回的时候加上符号。

代码

::: {.code-include lexer="cpp"} ./string-to-integer.cpp :::

使用了Boost的单元测试框架,链接的时候要加上 -lboost_unit_test_framework 参数。