模拟实现atoi

简介: 模拟实现atoi

介绍atoi函数


atoi


6dbf657ca189aa0e43f8b561e2c2702f_1cb86078981841178522c49eaf6dfad9.png


将数字字符串转化为整形


实例如下


#include<stdio.h>
#include<stdlib.h>
int main()
{
  char ch[] = "123";
  int i = atoi(ch);
  printf("%d\n", i);
  return 0;
}


9e461eb9641daeaaf6a83ba61e0adf2d_a5f5585c950a4e1facd21b6ce555f51f.png


实现思路


如果在最理想状态下代码实现比较简单


#include<stdio.h>
int my_atoi(const char* str)
{
  int ret = 0;
  while (*str)
  {
  ret = ret * 10 + (*str - '0');
  str++;
  }
  return ret;
}
int main()
{
  char ch[] = "123";
  int ret = my_atoi(ch);
  printf("%d\n", ret);
  return 0;
}


148a8ae665bdccad31c879d2c7b417fc_3e8c1689f53649a1a65f179324c1c0a8.png


需要考虑的极端情况


1. 空指针
 2. 空字符串
 3. 空格
 4. +- 符号
 5. 越界
 6. 非数字字符


在考虑极端情况下,该如何实现次函数呢?


#include<stdio.h>
#include<assert.h>
#include<limits.h>
#include<ctype.h>
enum M
{
  VALID,
  INVALID
}m=INVALID;//默认返回值是无效的
int my_atoi(const char* str)
{
  assert(str);
  int flag = 1;
  //如果是空字符串
  if (*str == '\0')
  {
  return;
  }
  //跳过空白字符
  while (isspace(*str))
  {
  str++;
  }
  //判断符号的正负
  if (*str == '+')
  {
  flag = 1;
  str++;
  }
  else if (*str == '-')
  {
  flag = -1;
  str++;
  }
  long long ret = 0;
  while (*str)
  {
  //判断是否为数字字符串
  if (isdigit(*str))
  {
    ret = ret * 10 + flag*(*str - '0');
    //判断是否越界
    if (ret > INT_MAX || ret < INT_MIN)
    {
    return;
    }
  }
  else
  {
    return (int)ret;
  }
  str++;
  }
  //当遇到字符串结尾的'\0'时正常返回
  if (*str == '\0')
  {
  m = VALID;
  }
  return (int)ret;
}
int main()
{
  char ch[] = "123adf";
  int ret = my_atoi(ch);
  if (m == INVALID)
  {
  printf("无效返回:>%d\n", ret);
  }
  else if(m==VALID)
  {
  printf("有效返回:>%d\n", ret);
  }
  return 0;
}

b52070ca2b3558ba22274c0e0ecb94f4_e90b80bdefff4d4ab94b9365ee666fb6.png


此次模拟实现虽然是成功啦,但还是有些没有考虑到的因素。待之后进行完善


目录
相关文章
|
C语言
strlen函数【详解+模拟实现】
strlen函数【详解+模拟实现】
|
7月前
模拟实现atoi函数
模拟实现atoi函数
42 1
|
6月前
atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)
atoi函数(想要彻底了解atoi函数,那么看这一篇就足够了!)
strstr函数的使用及模拟实现
1.strstr函数 2.strstr函数的使用 3.strstr函数的模拟实现
176 0
strcpy与strncpy的模拟与实现
strcpy与strncpy的模拟与实现
52 0
|
7月前
atoi()详解及其模拟实现
atoi()详解及其模拟实现
|
7月前
atoi函数的模拟实现
atoi函数的模拟实现
模拟实现库函数strlen
模拟实现库函数strlen
32 0
strlen函数的两种模拟方法以及使用
strlen函数的两种模拟方法以及使用
|
C++
strlen 的三种模拟方法
strlen 的三种模拟方法
112 0
strlen 的三种模拟方法