字符函数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//字符分类函数
int main() {
char ch = 'w';
int ret = islower(ch);//判断是否是小写字母
printf("%d\n", ret);//2
int ret2 = isdigit(ch);//判断是否是数字
printf("%d\n", ret2);//0
printf("----------------\n");
char ch2 = tolower('Q');//大写转小写
printf("%c\n", ch2);//q
char ch3 = toupper('a');//小写转大写
printf("%c\n", ch3);//A
char arr[] = "i am a student";
int i = 0;
while (arr[i]) {
if (islower(arr[i])) {
arr[i] = toupper(arr[i]);
}
i++;
}
printf("%s\n", arr);//I AM A STUDENT
return 0;
}
2
0
----------------
q
A
I AM A STUDENT
内存函数
memcpy - 指针拷贝
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//memcpy - 指针拷贝
//void* memcpy(void* destination,const void* source,size_t num);
//函数memcpy从source的位置向后复制num个字节的数据到destination的内存位置
//这个函数在遇到'\0'的时候并不会停下来
//如果source和destination有任何的重叠,复制的结果都是未定义的
//memcpy( )函数的实现
void* my_memcpy(void* dest, const void* src, size_t length)
{
assert(src);
char* pdest = (char*)dest;
const char* psrc = (const char*)src;
while (length--)
{
*pdest = *psrc;
pdest++;
psrc++;
}
return dest;
}
int main()
{
char arr1[20] = "abcd";
char* arr2 = "efgk";
my_memcpy(arr1, arr2, 2);
printf("%s\n", arr1);//efcd
system("pause");
return 0;
}
efcd
memmove
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//void *memmove(void *dst, void const *src,size_t length);
//memmove()函数函数和memcpy()函数所进行的操作差不多,不过会考虑重叠的问题,
//所以,对于源和目标参数可能存在重叠问题,那么就可以使用memmove(),当src 和 dest 所指的内存区域重叠时,memmove() 仍然可以正确的处理,不过执行效率上会比使用 memcpy() 略慢些。
//memmove()函数的实现
void* my_memmove(void* dst, void* src, size_t length)
{
assert(dst);
assert(src);
char* pdest = (char*)dst;
const char* psrc = (const char*)src;
if ((pdest > psrc) && (pdest < psrc + length))
{//从后向前拷贝
while (length--)
{
*(pdest + length) = *(psrc + length);
}
}
else
{//从前向后拷贝
while (length--)
{
*pdest++ = *psrc++;
}
}
return dst;
}
int main()
{
int i = 0;
int arr1[] = { 1,2,3,5,4,6,8 };
int sz = sizeof(arr1) / sizeof(arr1[0]);
my_memmove(arr1 + 2, arr1, 16);
for (i = 0; i < sz; i++)
{
printf("%x ", arr1[i]);
}
system("pause");
return 0;
}
1 2 1 2 3 5 8
memset
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
//memset
//void* memset(void* a, int ch, size_t length);
//memset()函数是把从a开始的length个字节都设置成为字符值ch,然后返回指向 ptr 的指针。
//memset() 可以将一段内存空间全部设置为特定的值,所以经常用来初始化字符数组。
//memset()函数实现
void* my_memset(void* dest, int n, size_t length)
{
void* ret = dest;
assert(dest);
while (length--)
{
*(char*)dest = n;
dest = (char*)dest + 1;
}
return ret;
}
int main()
{
int arr1[10];
int i = 0;
int sz = sizeof(arr1) / sizeof(arr1[0]);
my_memset(arr1, 0, sz * sizeof(int));
for (i = 0; i < sz; i++)
{
printf("%d ", arr1[i]);
}
system("pause");
return 0;
}
0 0 0 0 0 0 0 0 0 0