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

////////字符串函数

//自己模拟实现strlen--计算字符串长度
//int my_strlen(const char* str)
//{
// int count = 0;
// assert(str);
// while (*str)
// {
// count++;
// str++;
// }
// return count;
//}
//
//int main()
//{
// if (my_strlen("abc") - my_strlen("abcdef") > 0)
// {
// printf("hehe\n");
// }
// else
// {
// printf("haha\n");
// }
// return 0;
//}


//模拟实现strcpy--字符串拷贝
//char* my_strcpy(char* dest,const char* src)
//{
// assert(dest&&src);
// char* ret = dest;
// //拷贝src指向的字符串到dest指向的空间,包含\0
// while (*src)
// {
// *dest = *src;
// dest++;
// src++;
// }
// *dest = *src;
// //while (*dest++ = *src++);
// //返回目的空间的起始地址
// return ret;
//}
//int main()
//{
// char arr1[] = "abcdefghi";
// char arr2[] = "bit";
// my_strcpy(arr1, arr2);
// printf("%s\n", arr1);
// return 0;
//}


//模拟实现strcat--字符串追加
//char* my_strcat(char* dest,const char* src)
//{
// char* ret = dest;
// assert(dest && src);
// //找到目的字符串的\0
// while (*dest)
// {
// dest++;
// }
// //追加
// while (*dest++ = *src++);
// return ret;
//}
//int main()
//{
// char arr1[30] = "hello";
// char arr2[] = " world";
// my_strcat(arr1, arr2);
// printf("%s\n", arr1);
// return 0;
//}


//模拟实现strcmp--字符串比较
//int my_strcmp(const char* str1,const char* str2)
//{
// assert(str1 && str2);
// //比较
// while (*str1 == *str2)
// {
// if (*str1 == '\0')
// {
// return 0;//相等
// }
// str1++;
// str2++;
// }
// return(*str1 - *str2);//不等
//}
//int main()
//{
// char* p1 = "abcdef";
// char* p2 = "abcdea";
// printf("%d\n", my_strcmp(p1, p2));
// return 0;
//}


//strncpy--字符串拷贝(指定长度)
//char* my_strncpy(char* dest,const char* src, int count)
//{
// assert(dest && src);
// char* ret = dest;
// //拷贝src指向的字符串(指定长度)到dest指向的空间,包含src的\0
// while (count && (*dest++ = *src++))
// {
// count--;
// }
// //如果指定长度超过src长度,后面补充\0
// if (count)
// {
// while (--count)
// {
// *dest++ = '\0';
// }
// }
// return ret;
//}
//int main()
//{
// char arr1[30] = "hello";
// char arr2[] = "world";
// my_strncpy(arr1, arr2, 7);
// printf("%s\n", arr1);
// return 0;
//}


//strncat--字符串追加(指定长度)
//char* my_strncat(char* dest,const char* src, int count)
//{
// assert(dest && src);
// char* ret = dest;
// //找到目的字符串的\0
// while (*dest++);
// dest--;
// //复制src字符串(指定长度)到dest
// while (count--)
// {
// if (!(*dest++ = *src++))
// {
// return ret;
// }
// }
// //指定长度比src短时,后面\0结束
// *dest = '\0';
// return ret;
//}
//int main()
//{
// char arr1[30] = "hello";
// char arr2[] = " world";
// printf("%s\n", my_strncat(arr1, arr2, 4));
// return 0;
//}


//strncmp--字符串比较(指点长度)
//int main()
//{
// const char* p1 = "abcdefg";
// char* p2 = "abciopl";
// int ret = strncmp(p1, p2, 4);
// printf("%d\n", ret);
// return 0;
//}


//strstr--字符串查找
//char* my_strstr(const char* str1, const char* str2)
//{
// assert(str1 && str2);
// char* s1, * s2;
// char* cur = str1;
// if (*str2 == '\0')
// {
// return (char*)str1;
// }
// while (*cur)
// {
// s1 = cur;
// s2 =(char*) str2;
// while (*s1 && *s2 && (*s1 == *s2))
// {
// s1++;
// s2++;
// }
// if (*s2 == '\0')
// {
// return cur;//找到
// }
// if (*s1 == '\0')
// {
// return NULL;
// }
// cur++;
// }
// return NULL;//找不到
//}
//int main()
//{
// char* p1 = "abcdefgabcd";
// char* p2 = "gcb";
// //char* ret = strstr(p1, p2);
// char* ret = my_strstr(p1, p2);
// if (ret == NULL)
// {
// printf("子串不存在\n");
// }
// else
// {
// printf("%s\n", ret);
// }
// return 0;
//}


//strtok--字符串分割
//int main()
//{
// //点分十进制的表示方式
// char arr[] = "192.168.31.121";
// char* p = ".";
// char buf[1024] = { 0 };
// strcpy(buf, arr);
// //分割buf中的字符串
// char* ret = NULL;
// for (ret = strtok(arr, p); ret != NULL; ret = strtok(NULL, p))
// {
// printf("%s\n", ret);
// }
// return 0;
//}


//strerror--返回错误信息
//#include<errno.h>
//int main()
//{
// //errno 是一个全局的错误码的变量
// //当c语言的库函数在执行过程中,发生了错误,就会把对应的错误码赋值到errno中
// //char* str = strerror(errno);
// //printf("%s\n", str);
// //打开文件
// FILE* pf = fopen("test.txt", "r");
//
// if (pf == NULL)
// {
// printf("%s\n", strerror(errno));
// }
// else
// {
// printf("open file success\n");
// }
// return 0;
//}

//函数 符合条件返回真
//iscntrl 任何控制字符
//isspace 空白字符:空格‘ ’换页‘\f’换行‘\n’回车‘\r’制表符‘\t’垂直制表符‘\v’
//isdigit 十进制数字0-9
//isxdigit 十六进制数字,包含所有十进制数字,小写字母a-f,大写字母A-F
//islower 小写字母a-z
//isupper 大写字母A-Z
//isalpha 字母a-z或A-Z
//isalnum 字母或者数字,a-z,A-Z,0-9
//ispunct 标点符号,任何不属于数字或者字母的图形字符(可打印)
//isgraph 任何图形字符
//isprint 任何可打印字符,包含图形字符和空白字符

//toupper--字母小写转大写
//tolower--字母大写转小写


#include<ctype.h>
int main()
{
char ch = toupper('q');
char p = tolower('A');
//putchar--输出一个字符
//putchar(ch);
//printf("\n");
//putchar(p);
char arr[] = "I Am A Student";
int i = 0;
while (arr[i])
{
if (isupper(arr[i]))
{
arr[i] = tolower(arr[i]);
}
i++;
}
printf("%s\n", arr);
return 0;
}