453-atoi函数的实现

1、atoi函数

int atoi(const char *str)

作用:

  • 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。

参数:

  • str– 要转换为整数的字符串。

返回值:

  • 该函数返回转换后的长整数,如果没有执行有效的转换,则返回0

测试:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   int val;
   char str[20];
   
   strcpy(str, "98993489");
   val = atoi(str);
   printf("字符串值 = %s, 整型值 = %d\n", str, val);

   strcpy(str, "runoob.com");
   val = atoi(str);
   printf("字符串值 = %s, 整型值 = %d\n", str, val);

   return(0);
}

测试结果:

字符串值 = 98993489, 整型值 = 98993489
字符串值 = runoob.com, 整型值 = 0

2、自己实现atoi函数

  • 1、如果参数字符串以数字开头,则一直往后读,直到读到非数字字符或\0。然后将这些数字以整数形式返回。如:“62562hja”,返回整数62562“1331”,返回整数1331

  • 2、如果参数字符串以正负号开头,则往后读取,如果紧接着读到数字,此时与(1)相同。只是在返回整数时要加正负号。如果正负号后面不是数字字符,则返回0。如:“+4245sja”,返回4245“-463hsda”,返回-463“-gab”“+hakjs”返回0

  • 3、如果参数字符串以空格字符开头(\n,\r,\t,\f,\v),则跳过空格字符,再按照(1)和(2)进行判断。如:“ 425jhad”,返回425

  • 4、如果不是以上的三种情况,则返回0。如“jajs4676”,“jsab”,均返回0

//atoi函数的实现                                                                                                
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
 
//参数为要转化的字符串
int my_atoi(char arr[])
{
    if(arr == NULL)
    {
        //非法输入
        return -1;
    }   
    int index = 0;//记录数组下标
    int num = 0;//存放最终要返回的值
    int flag = 1;//设置符号标志位
        
    while(isspace(arr[index]))//是空格返回非零值(不一定是1),否则返回0
    {
        index++;//跳过空格字符,不只有空格,还有\n,\r,\f,\t,\v之类的字符
    }   
    if(arr[index] == '-')
    {
        flag = -1; //除空格外遇到的第一个数字是符号,标记为-1
    }   
    //注意:正负号不算作1
    if(arr[index] == '-' || arr[index] == '+')//如果遇到正负号,说明可以往后继续走
    {
        index++;
    }
    while(arr[index] >= '0' && arr[index] <= '9')//如果遇到的数字说明可以继续往下走
    {
        num = num*10 + arr[index] - '0';
        index++;
    }
    return flag*num;
}

3、isspace函数

int isspace(int c);

作用:

  • 检查所传的字符是否是空白字符
  • c – 这是要检查的字符。

返回值:

  • 如果 c 是一个空白字符,则该函数返回非零值(true),否则返回 0(false)。

标准的空白字符包括:

' '     (0x20)    space (SPC) 空格符
'\t'    (0x09)    horizontal tab (TAB) 水平制表符    
'\n'    (0x0a)    newline (LF) 换行符
'\v'    (0x0b)    vertical tab (VT) 垂直制表符
'\f'    (0x0c)    feed (FF) 换页符
'\r'    (0x0d)    carriage return (CR) 回车符
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liufeng2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值