字符串的使用和剖析(3):

相关标签: # git# 信息
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
//(1):strtok函数:分解字符串函数,用sep参数中的字符当作分隔符
//char * strtok ( char * str, const char * sep ); sep参数是个字符串,用作分隔符的字符集合
//int main()
//{
// //@qq.com
// // qq com --strtok
// char p1[] = "@qq.com";
// char* p2 = "@.~"; //用来切割目的字符串的分隔符
// char* ret = NULL;
// for (ret=strtok(p1, p2); ret != NULL; ret=strtok(NULL, p2))
// {
// printf("%s ", ret);
// }
// return 0;
//}
//(2):strerror函数:错误信息函数, 返回错误码,所对应的错误信息
//char * strerror ( int errnum );
//#include
//int main()
//{
// //错误码 错误信息
// //0-- No error
// //1-- Operation not permitted
// //2-- No such file or directory
// //... ...每个都不一样
// //char* str = strerror(2);
// //printf("%s\n", str);
//
// FILE* pf=fopen("test", "r");
// if (pf == NULL)
// {
// //error是一个全局的错误码的变量
// //当程序执行过程中,发生了错误,程序就会把对应的错误码,赋值到error变量中
// printf("%s\n", strerror(errno)); //用error,要使用error.h头文件
// }
// else
// {
// printf("open file success\n");
// }
// return 0;
//}
//(3):字符分类、转换函数:库文件:
//1:isdigit:是否为数字0-9 2:isxdigit:是否为十六进制数字(包括所有十进制数字,大小写字母a-f)
//3、islower:是否为小写字母 4、isupper:是否为大写字母
//5、isalpha:是否为字母 6、isalnum:是否为字母或数字
//7、tolower:转换为小写字母 8、toupper:转换为大写字母
//int main()
//{
// char arr[] = "I am A millionaire";
// int i;
// for (i = 0; arr[i] != '\0'; i++)
// {
// if (isupper(arr[i]))
// {
// arr[i]=tolower(arr[i]);
// }
// }
// printf("%s\n", arr);
// return 0;
//}
//(4):模拟实现memcpy:内存拷贝函数(什么类型都可以) //str开头的函数,只能对字符串进行操作
// memcpy不能拷贝自身重叠、
// memcpy 只要处理不重叠的内存拷贝就可以
// memmove 还可以处理重叠的内存拷贝(想自身拷贝几个就拷贝几个)
//void * memcpy ( void * destination, const void * source, size_t num );
//struct s
//{
// char name[20];
// int age;
//};
//void* my_memcpy(void* dest, const void* src, size_t num)
//{
// assert(dest != NULL);
// assert(src != NULL);
// void* ret = dest;
// while (num--)
// {
// *(char*)dest = *(char*)src;
// ++(char*)dest; //也可以用:dest=(char*)dest+1;
// ++(char*)src;
// }
// return ret;
//}
//int main()
//{
// int arr1[] = { 1,2,3,4,5 };
// int arr2[5] = { 0 };
// //memcpy(arr2, arr1,sizeof(arr1));
//
// //struct s arr3[] = { {"张三",10},{"李四",20} };
// //struct s arr4[2] = { 0 };
// //memcpy(arr4, arr3, sizeof(arr3));
//
// my_memcpy(arr2, arr1, sizeof(arr1));
// return 0;
//}
//(5)模拟实现memmove:处理内存重叠的情况函数
//void * memmove ( void * destination, const void * source, size_t num );
//void* my_memmove(void* dest, const void* src, size_t num)
//{
// assert(dest && src);
// void* ret = dest;
//
// if (dest(char*)src+num) //从前向后拷贝
// {
// while (num--)
// {
// *(char*)dest = *(char*)src;
// dest = (char*)dest + 1;
// src = (char*)src + 1;
// }
// }
// else //从后向前拷贝
// {
// while (num--)
// {
// *((char*)dest + num) = *((char*)src + num);
// }
// }
// return ret;
//}
//int main()
//{
// int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
// int i;
// //memmove(arr, arr+3, 20);
// //for (i = 0; i < 10; i++)
// //{
// // printf("%d ", arr[i]); //打印45678678910
// //}
// my_memmove(arr, arr+3, 20);
// for (i = 0; i < 10; i++)
// {
// printf("%d ", arr[i]);
// }
// return 0;
//}
//(6)memcmp:内存比较函数
//int memcmp ( const void * ptr1, const void * ptr2, size_t num );
//int main()
//{
// int arr1[] = { 1,2,3,4,5 };
// int arr2[] = { 1,2,5,4,3 };
// //int ret = memcmp(arr1, arr2, 8); //打印0
// int ret = memcmp(arr1, arr2, 9); //打印-1
// printf("%d\n", ret);
// return 0;
//}
//(7):memset:内存设置函数
//void * memset ( void * ptr, int value, size_t num );
//ptr:要设置的地址。 value:要设置的字符。 num:要设置的字符个数
int main()
{
int i;
char arr1[10] = "";
memset(arr1, '$', 10);
for (i = 0; i < 10; i++)
{
printf("%c ", arr1[i]);
}
printf("\n");
int arr2[10] = { 0 };
memset(arr2, 1, 10);
for (i = 0; i < 10; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
文章来源: https://blog.51cto.com/u_15699887/5468803
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报