主要考虑,字符串中是否有非法字符,字符串是否有溢出控制

#include<stdio.h>

int myatoi(const char *str){
int sight=,ret=,i=;
if(str[i]==' ')i++;
int max=(<<)-;
if(str[i]=='+'||str[i]=='-'){
if(str[i]=='-')sight=-;
i++;
} for(i=;str[i]>=''&&str[i]<='';i++){
ret*=;
ret+=str[i]-'';
if(ret>max){//溢出控制
ret=max;break;
}
}
return ret*sight;
} int main(){
printf("%d\n",myatoi("214748.3649"));
}

后来仔细想想发现自己的代码弱爆了!

改变如下:

#include<stdio.h>
#include<iostream>
using namespace std; int myatoi(char *str){
if(NULL == str)return ;//处理空指针,加强程序的鲁棒性
int sight=,ret=,i=; while(str[i]==' ')i++;//处理字符串开始的空格 if(str[i]=='+'||str[i]=='-'){ //处理正负号
if(str[i]=='-')sight=-;
i++;
} for(;str[i]>=''&&str[i]<='';i++){
ret*=;
ret+=str[i]-'';
if(ret<){//溢出控制
return ;
}
} return ret*sight;
} int main(){
char *s=NULL;
printf("%d\n",myatoi(s));
printf("%d\n",myatoi(" -123189267q 2e.1"));
getchar();
return ;
}

atoi函数的实现——面试的更多相关文章

  1. atoi()函数

    原型:int  atoi (const  char  *nptr) 用法:#include  <stdlib.h> 功能:将字符串转换成整型数:atoi()会扫描参数nptr字符串,跳过前 ...

  2. C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明. ● itoa():将 ...

  3. 题目1003:A+B ---c_str(),atoi()函数的使用;remove , erase函数的使用

    #include<stdio.h> #include<stdlib.h> int sw(char *a){ ,c=; while(a[i]){ ') c=c*+a[i]-'; ...

  4. atoi()函数的实现

    atoi()函数的功能:将字符串转换成整型数:atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回( ...

  5. C语言itoa()函数和atoi()函数详解(整数转字符)

    http://c.biancheng.net/cpp/html/792.html C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整 ...

  6. C语言itoa函数和atoi 函数

    C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转 换为字符串的一个例子: # include <stdio.h>  ...

  7. 【C语言】模拟实现atoi函数

    atoi(表示 ascii to integer)是把字符串转换成整型数的一个函数. atoi()函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( ...

  8. String to Integer (atoi) - 字符串转为整形,atoi 函数(Java )

    String to Integer (atoi) Implement atoi to convert a string to an integer. [函数说明]atoi() 函数会扫描 str 字符 ...

  9. atoi()函数(转载)

    atoi()函数 原型:int  atoi (const  char  *nptr) 用法:#include  <stdlib.h> 功能:将字符串转换成整型数:atoi()会扫描参数np ...

随机推荐

  1. CentOS 6.5 x86_64升级内核到最新版2.6.32-696.1.1.el6.x86_64

    安装keepaliver时内核版本不一致,会导致后来的keepalive安装完成后不能正常提供服务 [root@gmxfjr-dev17 ha]# ls /usr/src/kernels/2.6.32 ...

  2. Python之路,Day9 - 线程、进程、协程和IO多路复用

    参考博客: 线程.进程.协程: http://www.cnblogs.com/wupeiqi/articles/5040827.html http://www.cnblogs.com/alex3714 ...

  3. notepad配合正则表达式处理文本

    <option value="irs01.com">irs01.com</option><option value="hdslb.com&q ...

  4. Django 中设置分页页码,只显示当前页以及左右两页

    设置后的效果如下: Django 给我们提供了分页的功能:`Paginator`和`Page`类都是用来做分页的.他们在Django中的路径为:`from django.core.paginator ...

  5. Java进阶1. Synchronized 关键字

    Java进阶1. Synchronized 关键字 20131025 1.关于synchronized的简介: Synchronized 关键字代表对这个方法加锁,相当于不管那一个线程,运行到这个方法 ...

  6. IEnumerable.Select和SelectMany的区别

    例子(一个人可以有多个手机) public class People { public string Name { get; set; } public List<Phone> Phone ...

  7. 2017.10.23 Arduino Atmel EFM32低功耗监测

    mark:因为最近一直调试(维护)客户的EFM32,和其他系列的Atmel芯片.对atmel不熟悉,做点功课. 1. 自建Arduino 最小系统(原来树莓派都是Atmel的芯片) http://ww ...

  8. vue.js 源代码学习笔记 ----- $watcher

    /* @flow */ import { queueWatcher } from './scheduler' import Dep, { pushTarget, popTarget } from '. ...

  9. console 代理

    window.log = function(){ if(!window.console ){ return; } var arr = [].slice.call(arguments); arr.uns ...

  10. 有关php的session

    From:http://blog.csdn.net/sayigood/article/details/4850480 php中session的用法 PHP中的session默认情况下是使用客户端的Co ...