前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过cplusplus网站学习函数用法演示

通过cplusplus网站学习函数用法演示

作者头像
用户11039545
发布2024-03-28 17:50:56
850
发布2024-03-28 17:50:56
举报
文章被收录于专栏:c语言

在我们学习c语言或者c++时,总会遇到一些我们熟悉的库函数,这时候就需要我们通过cplusplus网站搜索学习,下面就由我为大家演示一下如何通过这个网站的页面学习函数的使用方法吧!

atoi - C++ Reference (cplusplus.com)

我们今天要学习的是atoi库函数。

首先我们来看这个函数的参数和返回类型

函数的返回类型为int,函数接收的参数类型为const char* 类型。

接着看下面这一大段文字:

我们通过翻译,我们可以了解到,atoi 是一个标准的库函数,它的全称是 "ASCII to Integer",用于将 ASCII 字符串转换成整数。

这个函数会解析 ptr 指向的字符串,直到遇到无法转换为数字的字符为止,然后将解析得到的数字返回。如果 ptr 无法被解析为有效的整数(例如,它是一个空字符串,或者它不包含任何数字),则函数返回 0。

再看看它的参数和返回值:

C-string 以整数的表示形式开头。

成功后,该函数将转换后的整数作为值返回。 如果转换后的值超出 的可表示值范围,则会导致未定义的行为

代码语言:javascript
复制
#include <stdio.h>  
#include <stdlib.h>  
  
int main() {  
    const char *str = "12345";  
    int num = atoi(str);  
    printf("The number is: %d\n", num);  
    return 0;  
}

在这个例子中,字符串 "12345" 被转换为整数 12345,然后打印出来。

然后,我们可以通过一些案例,具体研究一下这个函数的用法:

通过输入1234字符串,我们发现输出结果转换成了数字:

接着我们在前面添上正负号试试:

我们会发现这个函数会读取字符串前面的正负号。

那如果字符串前面有空格呢?

正如你所见,这个函数会把空格过滤掉。

那如果添加上一些字母呢,还会不会被转换呢?

并不会把字母打印出来。

那如果是在中间加上空格呢?

这时后面的数字都消失了。

我们输入一个很大或者很小的数字时:

会把这个很大或很小的数值转换为最大或最小的数字。

在传递空值时:

接下来,我们来模拟实现一个 atoi 函数。这个函数需要处理一些边界情况,比如空指针、空字符串、跳过前导空格、正负号等。此外,我们还需要处理可能的溢出情况。

对于跳过前导空格,我们需要下面这样一个库函数:

isdigit用来判断传入的是不是数字字符

下面我们来模拟实现以下这个函数:

代码语言:javascript
复制
# define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<ctype.h>
enum State
{
	VAILD,
	INVAILD
}state = INVAILD;
int MyAtoi(const char* str)
{
	assert(str != NULL);
	if (*str == '\0')
	{
		return 0;
	}
	while (isspace(*str))//isspace返回值不为0,代表是空格
	{
		str++;
	}
	//代码走到这里之后,str遇到的一定不是空格,有可能是正负号
	int flag = 1;
	if (*str == '+')
	{
		flag = 1;
		str++;
	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
	}
	long long ret = 0;
	while (*str != '\0')
	{
		if (isdigit(*str))
		{
			//是数字字符 把字符1变成数字1->把字符'1'减去'0'得到的就是数字1
			ret = ret * 10 + (*str - '0') * flag;
		}
		else
		{
			//不是数字字符
			return (int)ret;
		}
		str++;//让指针继续往后走
	}
	//解决最大最小值问题
	if (ret > INT_MAX)
	{
		ret = INT_MAX;
	}
	if (ret < INT_MIN)
	{
		ret = INT_MIN;
	}
	//正常转换和非正常转换的区别在于一个走到斜杠0,一个没有
	if (*str == '\0')
	{
		state = VAILD;
	}
	return (int)ret;
}
int main()
{
	int ret = MyAtoi("123 ");
	if (state == VAILD)
	{
		printf("合法转换:%d\n", ret);
	}
	else
	{
		printf("不合法转换:%d", ret);
	}
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档