几种常用的字符串查找函数、错误信息函数、字符函数、内存操作函数的使用

一、字符串查找函数

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;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值