Android JNI string.h 常用函数详解

JNI 开发中 string.h的一些常用函数做个总结:

  1. strcpy
    char *strcpy(char *destin, char *source);
    功能:将source指向的字符串拷到destin。
int main()
 {

    char dest[5];
    char *src="123456";
    strcpy(dest, src);
   printf("dest= %s, %s, %s", dest, dest+4, dest+5);

   return 0;
 }

从结果可知确实将src的内容复制过去了,但是全部复制导致dest满了,使用不当就会出错!
在这里插入图片描述

  1. strncpy
    char *strncpy(char *destin, char *source, int len);
    功能:将source指向的len个字符串拷到destin。
 int main()
 {

    char dest[5];
   char *src="123456";
  strncpy(dest, src, 3);
    dest[3]= '\0';
   printf("dest= %s, %s, %s", dest, dest+4, dest+5);

     return 0;
 }

结果可知加上‘\0’结束符后dest内容变的更安全,strcpy和strncpy要额外加字符结束符!

在这里插入图片描述

  1. strcat
    char* strcat(char * str1,char * str2);
    功能: 把字符串str2接到str1后面,str1最后的’\0’被取消
 int main()
 {
 
   char dest[5]="abcd";
    char *src="123456";
   strcat(dest, src);
    printf("dest= %s", dest);

  return 0;
 }

在这里插入图片描述

  1. strncat
    char *strncat(char *dest, const char *src, size_t maxlen)
    功能: 将字符串src中前maxlen个字符连接到dest中
 int main()
  {

     char dest[10]="abcd";
    char *src="123456";
    strncat(dest, src, 8);
    printf("dest= %s", dest);

   return 0;
 }

在这里插入图片描述
与strncpy不同,strncat会自动在末尾加‘\0’,若指定长度超过源字符串长度,则只复制源字符串长度即停止,更安全!

  1. strcmp
    int strcmp(char * str1,char * str2);
    功能: 比较两个字符串str1,str2
    返回: str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数
 int main()
{

   char dest[10]="abcd";
    char *src="a23456";
     char d2[8]="abcd";
   int res;
    res=strcmp(dest, src);
    printf("res= %d \n", res);
     res=strcmp(dest, d2);
    printf("res= %d \n", res);

    return 0;
}

在这里插入图片描述

结果可知每一位都要比较,且与原字符数组长度无关。

  1. strncmp
    int strncmp(char *str1,char *str2,int count)
    功能: 对str1和str2中的前count个字符按字典顺序比较
    返回: 小于0:str1<str2,等于0:str1=str2,大于0:str1>str2
int main()
{

    char dest[10]="abcd";
    char *src="a23456";
    char d2[8]="abcd";
    int res;
    res=strncmp(dest, src, 1);
    printf("res= %d \n", res);
    res=strncmp(dest, d2, 1);
    printf("res= %d \n", res);

    return 0;
}

在这里插入图片描述

  1. strchr
    char* strchr(char* str,char ch);
    功能: 找出str指向的字符串中第一次出现字符ch的位置
    返回: 返回指向该位置的指针,如找不到,则返回空指针
int main()
 {

  char dest[10]="abcd";
     char* rp;
  char ch= 'c';
    rp=strchr(dest, ch);
     if(NULL == rp)
       printf("no %c exist", ch);
   else
        printf("pos of %c is %d", ch, (int)(rp-dest+1));
 
     return 0;
}

在这里插入图片描述

  1. strrchr
    char *strrchr(const char *s, int c)
    功能: 得到字符串s中最后一个含有c字符的位置指针
    返回: 位置指针
int main()
 {

     char dest[10]="abcdabc";
    char* rp;
     char ch= 'c';
     rp=strrchr(dest, ch);
    if(NULL == rp)
       printf("no %c exist", ch);
    else
        printf("pos of %c is %d", ch, (int)(rp-dest+1));

     return 0;
 }

在这里插入图片描述

strrchr 比strchr多的 r 意指反向寻找,位置都是从1开始计数(非从0开始)

  1. strstr
    char* strstr(char* str1,char* str2);
    功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)
    返回: 返回该位置的指针,如找不到,返回空指针
 int main()
{
 
    char dest[10]="abcdabc";
    char* rp;
    char ch1[]= "c";
   char str2[]= "cda";
     rp=strstr(dest, ch1);
   if(NULL == rp)
        printf("no %s exist", ch1);
    else
       printf("substring is %s \n", rp);

     rp=strstr(dest, str2);
    if(NULL == rp)
      printf("no %s exist", str2);
     else
       printf("substring is %s ", rp);
 
   return 0;
 }

在这里插入图片描述

可以找单个字符串(字符不符合参数要求)

  1. strnset
    char *strnset(char *s, int ch, size_t n)
    功能: 将字符串s中前n个字符设置为ch的值
    返回: 指向s的指针
int main()
 {

     char dest[10]="abcdabc";
     char* rp;
    char ch= 'F';
     rp=strnset(dest, ch, 4);
   printf("after strnset dest is %s \n", rp);

     return 0;
 }

在这里插入图片描述

  1. strset
    char *strset(char *s, int ch)
    功能: 将字符串s中所有字符设置为ch的值
    返回: 指向s的指针
  int main()
 {

    char dest[10]="abcdabc";
     char* rp;
     char ch= 'F';
    rp=strset(dest, ch);
     printf("after strnset dest is %s \n", rp);
    printf("after strnset dest is %s \n", dest);
     return 0;
}

在这里插入图片描述

结果的 rp和dest 都被修改为同一内容!

  1. strtok
    char *strtok(char *s1, const char *s2)
    功能:分解s1字符串,用特定分隔符(s2)分隔成多个字符串
    返回: 字符串s1中首次出现s2中的字符前的子字符串指针
    strtok()在参数s1的字符串中发现参数s2中包涵的分割字符时,则会将该字符改为\0字符。在第一次调用时,strtok()必需给予参数s1字符串,往后的调用则将参数s1设置成 NULL。每次调用成功则返回指向被分割出片段的指针。
 int main()
 {

   char dest[]="ab,cd,ef,c";
    char* rp;
     char ch[]= ",";
    rp=strtok(dest, ch);
     while(NULL != rp)
    {
         printf("dest: %s ", dest);
        printf("rp: %s \n", rp);
       rp=strtok(NULL, ch);
     }

    return 0;
 }

在这里插入图片描述

说明:尽量使用可重入版的strtok,Windows平台下为strtok_s,Linux平台下为strtok_r。
牢记strtok函数族的分隔规则:忽略字符串前后的分隔符,连续的分隔符被当做一个处理。
在使用strtok前,请对源字符串进行备份,除非你可以接受字符串被修改这一事实(修改为分隔的第一个字符串)。

  1. strupr
    char *strupr(char *s)
    功能: 将字符串s中的字符变为大写
 int main()
 {

    char dest[]="ab,cd,EF,c";
    char* rp;
    rp=strupr(dest);
     printf("dest: %s, rp: %s", dest, rp);
 
     return 0;
 }

在这里插入图片描述
原字符串dest 也被修改!!,对符号和大写字符无影响。

char *strlwr(char *s)与它相反,将字符串中的字符变为小写字符

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值