一、字符串查找函数
1、strtok函数的定义与使用
(1) 功用:用于按照 给定的 分隔符 对字符串进行分割
1. strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向 这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
2.strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
3.strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
4.如果字符串中不存在更多的标记,则返回 NULL 指针。
(2) 头文件:
(3) 使用方法:
char* strtok(char*arr,const char* p)
传参形式: strtok(arr,p) arr为数组首元素的地址,p是 类型为 const char*是用于存放分隔符的字符串。返回参数为一个char* 型指针。
简单理解用法:
就是如果只要第一节字符就可以使用 strtok(arr,p) arr为需要截取的字符串的首元素地址,p 类型为 const char*是用于存放分隔符的字符串。当需按照分隔符 截取多个分段时,应用for循环实现,除第一次调用时 写 strtok(arr,p),剩余分隔应写strtok(NULL,p),传递空指针给后续调用的strtok。当不存在更多的标记时,则会返回NULL指针。
(4) 举例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char arr[]="yangkehong@qq.com";
const char* p="@.";
char buf[50];
strcpy(buf,arr);
char* str=NULL;
for(str = strtok(buf,p);str !=NULL;str=strtok(NULL,p))
{
printf("%s\n",str);
}
return 0;
}
二、错误信息报告
2、strerror函数的定义与使用
char * strerror ( int errnum );
(1)作用过程:返回错误码,所对应的错误信息。,解读传入分错误码将其翻译为为对应的错误信息显示
(2) 头文件:#include
(3) 使用方法:strerror(n) n为int 型;
三、字符操作
3、字符分类 函数的定义与使用
字符转换函数
int tolower (int c) (将大写字母转小写的函数)
int toupper(int c) (将小写字母转大写的函数)
四、内存操作函数
4、memmcpy函数的定义与使用
void * memcpy ( void * destination, const void * source, size_t num );
(1) 功用:
* 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
* 这个函数在遇到 '\0' 的时候并不会停下来。
* 如果source和destination有任何的重叠,复制的结果都是未定义的。
(2) 头文件:#include /
(3) 使用方法:
//自定义实现memcpy函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
void* my_memcpy(void*dest,void*star,size_t n)
{
void*pf=dest;
assert(dest&&star);
while(n--)
{
*(char*)dest=*(char*)star;
dest=(char*)dest+1;
star=(char*)star+1;
}
return pf;
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int brr[5]={0};
my_memcpy(brr,arr+2,5*sizeof(arr[0]));
int i;
for(i=0;i<5;i++)
printf("%d ",brr[i]);
return 0;
}
4、memmove函数的定义与使用
void * memmove ( void * destination, const void * source, size_t num );
(1) 功用:
* 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
* 如果源空间和目标空间出现重叠,就得使用memmove函数处理。
(2) 头文件:#include
(3)使用:
//自定义实现memmove函数
void* my_memmove(void*dest,void*star,size_t n)
{
void*pf=dest;
if(dest<star)
{
//从前向后覆盖
while(n--)
{
*(char*)dest=*(char*)star;
dest=(char*)dest+1;
star=(char*)star+1;
}
}
else
{
//从后向前覆盖
while(n--)
{
*((char*)dest+n)=*((char*)star+n);
}
}
return pf;
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int brr[6]={0};
my_memmove(brr,arr+4,6*sizeof(arr[0]));
int i;
for(i=0;i<6;i++)
printf("%d ",brr[i]);
return 0;
}
5、memcmp函数的定义与使用
int memcmp ( const void * ptr1, //比较函数的地址
const void * ptr2, //比较函数的地址
size_t num ); //比较的字节长度
(1) 功用:
* 比较从ptr1和ptr2指针开始的num个字节(通过比较内存,可比较两个任意类型的数据)
*返回值同 strcmp函数,相等返回 0 ,前比后大返回1,前比后小返回-1
(2) 头文件:#include /
(3) 使用方法:
#include <stdio.h>
#include <string.h>
int main ()
{
char buffer1[] = "DWgaOtP12df0";
char buffer2[] = "DWGAOTP12DF0";
int n;
n=memcmp ( buffer1, buffer2, sizeof(buffer1) );
if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2);
else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2);
else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2);
return 0;
}
6、memset函数的定义域使用
(1) 功用:
* 设置内存为为1个指定的字符(以字节为单位修改)
(2) 头文件:#include /
(3) 使用方法:
memset(dest,'x',n)
dest 为 要修改的数组的起始地址
‘x’为指定的字符
n 为修改字节的长度
代码举例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char arr[]="abcde";
memset(arr,'x',4);
printf("%s",arr);
return 0;
}