my_atoi

//1、找到数字字符或者加减号//2、计算值时需要保证不溢出,将要溢出时返回最大或最小值int myatoi(const char *str)
{
    if ( NULL == str )
    {
        printf("error, param is NULL\n");
        return 0;
    }

    int nIndex = 0;

    while ( ‘\0‘ != *(str + nIndex) )
    {
        if ( (*(str + nIndex) >= ‘0‘ && *(str + nIndex) <= ‘9‘)
           || *(str + nIndex) == ‘-‘
           || *(str + nIndex) == ‘+‘ )
        {
            break;
        }

        ++nIndex;
    }

    if ( ‘\0‘ == *(str + nIndex) )
    {
        printf("warn, there is no dest \n");
        return 0;
    }

    // is negative number ?
    bool nFlag = false;

    if ( *(str + nIndex) == ‘-‘ )
    {
        nFlag = true;
        ++nIndex;
    }
    else if ( *(str + nIndex) == ‘+‘ )
    {
        ++nIndex;
    }

    int nRet = 0;

    while ( ‘\0‘ != *(str + nIndex) && *(str + nIndex) >= ‘0‘ && *(str + nIndex) <= ‘9‘ )
    {
        if ( nRet > INT_MAX / 10 )
        {
            return INT_MAX;
        }
        else if ( nRet < INT_MIN / 10 )
        {
            return INT_MIN;
        }
        else
        {
            if ( nRet == INT_MAX / 10 && *(str + nIndex) >= ‘8‘ )
            {
                return INT_MAX;
            }
            else if ( nRet == INT_MIN / 10 && *(str + nIndex) == ‘9‘ )
            {
                return INT_MIN;
            }
        }

        int  temp = *(str + nIndex) - ‘0‘;
        if ( nFlag )
        {
            temp *= -1;
        }

        nRet =  nRet*10 + temp;

        ++nIndex;
    }

    return nRet;
}
时间: 2024-10-14 15:40:30

my_atoi的相关文章

C语言:实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数,如+1234输出1234

#include<stdio.h> int my_atoi(char s[])     /*字符串转换函数*/ {  char* p = s;  int flag = 1;  int ret = 0;  if(*p=='-')  {   flag=-1;     }     if((*p=='+')||(*p=='-'))     {      p++;      }  while(*p!='\0')   {   if((*p>='0')&&(*p<='9'))  

【C语言】【笔试题】实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数。

#include <stdio.h> int  my_atoi(char s[5]) { int flag= 1;//在这作为判断'-'的开关 int ret=0; char *p=s; if (*p=='-')//如果第一个字符为'-',那么flag开关就会打开,置成-1: { flag=-1; } if (*p == '+'||*p=='-')//如果第一个字符为'-'或者为'+',那么不再做处理,直接跳到第二个字符 { p++; } while(*p!='\0') { if((*p>

实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数

比如:输入字符串"1234",返回数字1234.       输入字符串"+1234",返回数字1234.       输入字符串"-1234",返回数字-1234.                      #include <stdio.h> int my_atoi(char s[10]) {   int flag=1;  //代表符号位的正负号   int ret=0;   //用于存储取出来的数   char *p=s;   

将一个字符串转换为对应的整数

例: 将"1234"转换为数字1234. 将"-1234"转换为数字-1234. 将"+1234"转换为1234. 分析: 先设置一个标签sign=1, 一个一个读取字符,读到第一个字符判断它是不是'-'和'+':如果是'-'那么令标记sign=-1,并且读取字符指针向后移一位,若果是'+',那么sign不变,指针向后移一位,将新读到的字符如'1',用'1'-'0',得到的值是数字1,设置变量num=0,每次读到的字符转换成数字与num*10相加

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

atoi(表示 ascii to integer)是把字符串转换成整型数的一个函数. atoi()函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回.如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回0 我们在模拟实现atoi函数时,要注意以下几点: 1.字符串之前的空白问题 2.正负号 3.字符串为空时 4.

自写atoi----字符串转化为整形

字符串转化为整形的各类情况: char *str1 = "12345";       //普通 char *str2 = "+12345";     //正数 char *str3 = "-12345";      //负数 char *str4 = "   12345";    //前面有若干个空格 char *str5 = " 1 2 3 4 5";  //数字间存在空格 char *str6 = &q

C中atoi和strcpy的自定义实现

这是两道经常考到的笔试题,看似简单的实现,其实专注到细节,还是有很多需要注意扣分的地方. atoi实现: 1 #include <iostream> 2 #include<ctype.h> 3 using namespace std; 4 5 typedef enum status{ 6 OK,ERROR 7 }Status; 8 9 Status myErrno = ERROR; 10 int my_atoi(const char *p); 11 int main() 12 {

关于atoi,itoa与itob的重写和字符统计

首先关于函数atoi的重写, atoi的功能是字符串能够转换为整数保存,仅仅针对于整数,浮点数以后会有写: //实现一个函数int my_atoi(char s[]),可以将一个字符串转换为对应的整数. #include <stdio.h> #include <ctype.h> int main() { char st[50]; gets(st);  printf("%d",atoi(st)); return 0; } int atoi(char s[]) {

atoi()函数

atoi()函数的功能:将字符串转换成整型数:atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回(返回转换后的整型数). atoi()函数实现的代码: /* * name:xif * coder:[email protected]@yahoo.cn * time:08.20.2012 * file_name:my_atoi.c * function:int my_atoi(char* pstr)