模拟实现atoi函数

这篇具有很好参考价值的文章主要介绍了模拟实现atoi函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

模拟实现atoi函数,C语言学习专题,算法,c语言,字符串

请记住那些对你好的人,因为他们本可以不这么做 

文章目录

  • atoi函数介绍 
  • 模拟实现

  大家好,我是纪宁。

  atoi函数,它的功能是将数字字符转化为数字。我第一次见这个函数还是在大一上在刷蓝桥杯的时候,有一个关于回文数字的题,要解决将字符转化为数字的问题。白驹过隙,转眼间已经快大二了。这篇文章,纪宁就带你了解并实现atoi函数。

一、atoi函数介绍 

  atoi函数,可以将一串数字字符转化为数字。例如,可以将 "12345678" 转化为整形 12345678 。当字符串最前面有空格或者0的时候,atoi函数会自动将空格或者0删去,从第一个非0数字字符开始转化,直到遇见‘\0’或者非数字字符停止。

模拟实现atoi函数,C语言学习专题,算法,c语言,字符串

#include<stdlib.h>
#include<stdio.h>
int main()
{
	char str1[30] = { "0" };
	while ((scanf("%s", str1) != EOF))
	{
		printf("%d\n", atoi(str1));
	}
	return 0;
}

分别采用如下几种情况的输入对atoi函数的结果进行测试

  1.数字字符的前面有字符0

  2.数字字符前面有非数字字符

  3.数字字符前面有空格和字符0

  4.数字字符后面有非数字字符

  5.前面有字符0后面有负号

  6.只有负号和数字字符

  7.负号加数字字符加非数字字符

得到的结果如下

模拟实现atoi函数,C语言学习专题,算法,c语言,字符串

  根据上述测试结果,我们可以大致模拟atoi函数的实现。

二、模拟实现

  当我们模拟实现atoi函数的时候,最困难的就是处理掉一些函数处理异常字符只保留部分字符串的功能。

  当函数传过来的指针是空指针时,要进行断言;当函数传过来的字符串为空字符串时,要提示使用者:Abnormal Results(异常结果),再返回0,与正常返回结果是0的情况做区分;字符串的前半部分的空格和0都要在正常的 1~9 字符出现之前删掉,这部分用循环来完成;当正常数字字符串前面有符号时,要将符号转化为flag的正负来使用;当字符串前半部分有其他字符(字符+和字符-除外)时,直接返回0。

  数字字符串部分的处理:当程序识别出了即将开始进行字符串的转化时,还要保证开始之后的字符也为数字字符,在确保这写后,定义一个long long型的长整型,用来存放转化后的数字。当要转化大数字字符串转化为数字太大时,则也返回异常值0。

  解引用指针(*str)可得到数字字符,再用这个数字字符减去字符 ‘0’ ,就可以得到整形的数字,如此往复,经过简单的处理,则可得到数字字符串对应的整个整形数字,这个得到的数字就是正常值,返回即可。

  在判断返回的值是否是正常时,可以定义一个全局枚举类型变量,并将它的初值赋为 WRONG,如果正常转化成了数字,则再将枚举类型变量的值赋值为RIGHT。

#include<stdlib.h>
#include<stdio.h>
#include<assert.h>
enum JUD
{
	WRONG,
	RIGHT
}JUD=WRONG;
int my_atoi(const char* str)
{
	assert(str);
	int flag = 1;
	if (*str == '\0')
		return 0;
	while(*str == ' '||*str=='0')//处理空格
		str++;
	if (*str > '9' || *str < '0'&&*str!='-'&&*str!='+')
		return 0;
	if (*str == '-')
	{
		flag = -1;
		str++;
	}
	else if (*str == '+')
		str++;
	long long ret = 0;
	if (*str >= '1' && *str <= '9')
	{
		while (*str != '\0'&&*str>='0'&&*str<='9')
		{
			ret = ret * 10 + flag * (*str - '0');
			str++;
			if (ret<INT_MIN || ret>INT_MAX)
				return 0;
		}
	}
	JUD = RIGHT;
	return (int)ret;
}
int main()
{
	char str1[30] = { "0" };
	scanf("%s", str1);
	int ret = my_atoi(str1);
	if (JUD == WRONG)
		printf("Abnormal Results:%d\n",  ret);
	else
		printf("NOrmal Results:%d\n",  ret);
	return 0;
}

模拟实现atoi函数,C语言学习专题,算法,c语言,字符串

  博主写了好长时间,如果你能给博主一个免费三连鼓励一下博主的话,那么我觉得你的真是 泰     裤    辣 !!!模拟实现atoi函数,C语言学习专题,算法,c语言,字符串文章来源地址https://www.toymoban.com/news/detail-602662.html

到了这里,关于模拟实现atoi函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言 实现atoi函数

    函数int atoi(char *str);  使用ubuntu进行多文件编译(main.c  head.h   test.c) head.h(预处理) main.c(主函数) test.c(自定义函数)

    2024年02月10日
    浏览(31)
  • C语言-atoi函数的使用和实现

    atoi是C语言中常见的函数。大家可能对于他不太熟悉,其主要还是因为学校可能没有讲到。其实有很多函数像atol、atof都是一样的,本篇文章以atoi为例,剩余大家如果感兴趣可以再去了解。 目录 1.函数介绍 2.代码演示 3.atoi函数的模拟实现 4.扩展 功能: 1.解析字符串的内容,

    2024年04月25日
    浏览(24)
  • 模拟实现atoi函数(将数字字符串转换为整型)附加leetcode练习题

    各位朋友们,大家好啊!今天我为大家分享的知识是如何模拟实现atoi函数。相信大家如果能够理解这个知识,对大家以后的刷题是有帮助的。 我们要想实现某个函数,我们肯定要先知道这个函数的作用是什么,然后我们再根据它的作用来自己实现。我们先来看看stoi函数在库

    2023年04月19日
    浏览(45)
  • C/C++|物联网开发入门+项目实战|空间读写|非字符空间|返回值内部实现|嵌入式C语言高级|C语言函数的使用(2)-学习笔记(12)

    参考: 麦子学院-嵌入式C语言高级-C语言函数的使用 空间的读写 void fun(char *p); const char *p 只读空间,只为了看 char *p;该空间可能修改,几乎都要变 strcpy(); 定义:char *strcpy(char *dest,const char *src); sprintf(); 作用 1、修改 int * short * long * 2、空间传递 2.1 子函数看看空间里的情况

    2023年04月22日
    浏览(46)
  • R语言学习——矩阵相关函数

    1.diag()函数  2.eigen()函数 3.svd()函数 4.qr()函数  5.dim()函数 6.nrow()函数 7.ncol()函数 8.cbind()函数与rbind()函数  9.as.vector()函数与as.matrix()函数 10.solve()函数 11.aperm()函数 12. apply()函数 (1)作用一:求矩阵对角线元素(返回值为一个向量) 结果展示  (2)作用二:把向量转化为对

    2024年02月07日
    浏览(29)
  • C语言学习系列-->字符函数和字符串函数

    包含头文件: 函数 如果它的参数复合下列条件就返回真(一个非零数字) iscntrl 任何控制字符 任何控制字符 空白字符:空格’ ‘,换页’f’,换行’n’,回车’r’,制表符’t’或者垂直制表符’v’ isdigit 十进制数字0~9 isxdigit 十六进制数字,包括所有十进制数字,小

    2024年02月09日
    浏览(30)
  • C语言sscanf函数学习

    sscanf()与scanf()相比,scanf()以键盘(stdin)为输入源,sscanf()以第一个参数的固定字符串为输入源; sscanf()的头文件是 #include stdio.h; 函数原型:  int sscanf (char *str, char * format [, argument, ...]); 函数功能:用于从字符串中读取指定格式的数据 函数参数:参数str为要读取数据的字符串

    2024年02月10日
    浏览(31)
  • C语言学习 使用函数求素数和

    题目描述 本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。 输入两个正整数m和n(1≤m≤n≤500),求m和n之间的素数和。 素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。 要求定义并调用函数prime(p)判断p是否为素数

    2024年02月03日
    浏览(36)
  • C语言-基础语法学习-1 函数

    当我们需要在C语言中传递一维数组作为函数的形参时,需要了解以下几个关键点: 函数声明和定义:在声明和定义函数时,我们可以使用以下方式指定一维数组作为形参: 或者 这两种方式都允许我们传递一个一维数组作为形参。 数组传递:在C语言中,数组传递实际上是通

    2024年02月12日
    浏览(44)
  • C语言strcat函数再学习

    之前学习了strcat函数;下面继续学习此函数; 它的功能描述是, 功能 把src所指向的字符串(包括“\\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\\0”)。要保证*dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针。 说明 src和dest所

    2024年02月05日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包