#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;
}
寻找单身狗的小练习以及strncpy,strncat,atoi的模拟实现
最新推荐文章于 2024-06-01 18:28:10 发布