1.实现指定位置0或置1 以及 模拟实现atoi

一、将一个8bit数据(unsigned char 类型)的指定位的置0或者置1操作,并保持其他位不变。

若想要置1,那么就让它的指定位按位或1.

若想要置0,那么就让它的指定位按位与0.

void bit_set(unsigned char *p_date, unsigned char pos, int flag)
{
	assert(pos >= 1 && pos <= 8);
	if (flag == 1)
	{
		*p_date |= (1 << pos - 1);
	}
	if (flag == 0)
	{
		*p_date &= ~(1 << pos - 1);
	}
}
int main()
{
	int a = 127;
	bit_set(&a, 8, 1);
	printf("%d\n", a);

二、实现字符串到整数的转换,例如输入字符串“12345”,输出整数12345

也就是让我们模拟实现一下atoi函数,我么来看看这个函数:

头文件:#include<stdio.h>

原型: int atio(const char * string)

函数说明:参数 *string字符串,如果第一个非空格字符存在,是数字或者正负号那就开始做转化,之后检测到非数字(包括‘\0’)字符时,停止转换,返回整型数,否则,返回0.

实现这个函数我们还要用到两个标准库函数

1.isspace:

头文件<ctype.h>

原型:int isspace(int c)

2.isdigit

头文件:<ctype.h>

原型:int isdigit (int c)


#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<ctype.h>
enum STATE
{
	VALID,
	INVALID
};
enum  STATE state = INVALID;//state置为1  
int my_atio(const char* str)   
{
	assert(str);
	int flag = 1;
	long long ret =0;

	while (isspace(*str))  //看是否为空格
	{
		str++;
	}
	while (*str == '\0')  //是否一个字符串里面只有空格
	{
		return 0;
	}
	if (*str == '+')       //是否为正数
	{
		str++;
	}
	else if(*str == '-')    //是否为负数
	{
	 
		 flag = -flag;
		 str++;
    }
	
	while(isdigit(*str))    //是否是0~9数字
	 {
		 ret = ret * 10 + flag*(*str - '0');    //将其转化为数字
		 if ((ret<INT_MIN) || (ret >INT_MAX))   
		 {
			 return 0;
		 }
		 str++;
	 }
	 if (*str == '\0')   //正常退出
	 {
		 return (int)ret;
	 }
	 else
		 return ret;    //异常退出
}
int main()
{
	char *p = "   -123  ";
	int ret = my_atio(p);
	printf("%d\n", ret);
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值