寻找单身狗的小练习以及strncpy,strncat,atoi的模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>


//寻找单身狗
//int main()
//{
//int arr[] = { 1,2,1,3,2,3,4,4,5,6 };
//int i = 0;
//int sum = 0;
//int sz = sizeof(arr) / sizeof(arr[0]);
//for (int i = 0; i < sz; i++)
//{
//	sum ^= arr[i];
//}
//int count = 0;
//for (int i = 0; i < 32; i++)
//{
//	if (sum & 1 << i)
//	{
//		count = i;
//		break;
//	}
//}
//int dog1 = 0, dog2 = 0;
//for (int i = 0; i < sz; i++)
//{
//	if (arr[i] & 1 << count)
//		dog1 ^= arr[i];
//	else
//		dog2 ^= arr[i];
//}
//printf("第一个单身狗%d\n第二个单身狗%d", dog1, dog2);
//return 0;
//}

 


//模拟实现strncpy
//char* my_strncpy(char* dest, char* src, size_t num)
//{
//	if (dest == NULL || src == NULL)
//	{
//		return NULL;
//	}
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < num; i++)
//	{
//		if (src[j] == '\0')
//		{
//			dest[i] = '0';
//		}
//		else
//		{
//			dest[i] = src[i];
//			j++;
//		}
//	}
//	dest[j] = '\0';
//	return dest;
//
//}
//int main()
//{
//	char str1[100] = { 0 };
//	char str2[100] = { 0 };
//	printf("请输入字符串:>");
//	scanf("%s", &str1);
//	printf("请输入要拷贝的字符串:>");
//	scanf("%s", &str2);
//	int num = 0;
//	printf("请输入要拷贝字符的数量:>");
//	scanf("%d", &num);
//	my_strncpy(str1, str2, num);
//	printf("%s", str1);
//	return 0;
//}


//模拟实现strncat
//char* my_strncat(char* dest, char* src, size_t num)
//{
//	assert(dest);
//	assert(src);
//	char* cat = dest;
//	int i = 0;
//	while (*dest != '\0')
//	{
//		dest++;
//	}
//	for (; i < num; i++)
//	{
//		*dest = *src;
//		dest++;
//		*src++;
//	}
//	return cat;
//
//}
//int main()
//{
//	char arr1[20] = {"abcd"};
//	char arr2[20] = { "efghijknml" };
//	int num = 6;
//	char* ret = my_strncat(arr1, arr2, num);
//	printf("%s", ret);
//	return 0;
//}




#include <ctype.h>
#include <limits.h>
enum Status
{
	VALID,
	INVALID
}sta = INVALID;//非法转换
int my_atoi(const char* str)
{
	int flag = 1;
	assert(str);
	if (*str == '\0')
		return 0;
	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 0;
			}
		}
		else
		{
			return (int)ret;
		}
		str++;
	}
	if (*str == '\0')
	{
		sta = VALID;
	}
	return (int)ret;
}
int main()
{
	char arr[200] = { 0 };
	printf("请输入字符串:>");
	scanf("%s", arr);
	int ret = my_atoi(arr);
	if (sta == INVALID)
	{
		printf("非法返回:%d\n", ret);
	}
	else if (sta == VALID)
	{
		printf("合法转换:%d\n", ret);
	}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值