美文网首页NDK开发
NDK开发--C语言(字符串操作)

NDK开发--C语言(字符串操作)

作者: 初夏的雪 | 来源:发表于2021-06-11 19:07 被阅读0次

做过程序猿的同学相信大家都对字符串不陌生,这玩意也是工作中使用非常频繁的,那么我们今天就来了解一下C语言中的字符串。我们先从系统提供给我们的字符串操作的函数使用开始:

引入头文件:

#include <string.h>
#include <ctype.h>

开胃菜:(移动指针来变更字符串)

//将字符串中大写字符转化成小写
void toCharLower(char*lowerStr,char* org){
    char* temp =org;//此处的做法是不会破坏数据源
    while (*temp){
        *lowerStr=tolower(*temp);
        temp ++;//挪动指针的位置
        lowerStr ++;
    }
    *lowerStr='\0';//避免在打印的时候确认结束符导致打印乱码的问题
}


int main(){
    char* name = "LEON";
    char results[30];
    toCharLower(results,name);
    printf("全部小写后的结果:%s\n",results);
    return 0;
}

输出结果:

全部小写后的结果:leon

1、字符串的拼接(strcat,strcopy 函数)

    char des[25];
    char* first ="hi";
    char second[]={',','y','o','u','\0'};
    char* third="-";
    strcpy(des,first);//拷贝first 字符串到des字符串数组中
    strcat(des,second);//在des字符串数组中拼接second数组
    strcat(des,third);//在des字符串数组中继续拼接third字符指针
    printf("拼接的结果:%s\n",des);

输出的结果:

拼接的结果:hi,you-

2、字符串查询 (strstr函数)

说明:

1)strstr函数是查找字符串中是否存在某个子字符串,第一个参数是源字符串,第二个函数是要查找的字符串

2)strstr函数返回的是:要查找的字符串第一次出现的位置开始的字符串

3) 想要取出字符串在源字符串中的位置,那么直接用找到的字符串指针减去源字符串指针即可,这是为什么呢?

字符串在内存中是连续的内存地址,返回的是指向子字符串位置的指针,所以直接相减即可。

    char * text ="helloworld";
    char * subText="o";
    char* pop=strstr(text,subText);
    if (pop){
        //不为NULL ,表示找到了子字符串
        printf("找到子字符串了:%s\n",pop);
    }else{
        //没有找到
        printf("没有找到\n");
    }

    //取出字符串的位置
    int index = pop-text;
    printf("位置:%d\n",index);

输出结果:

找到子字符串了:oworld ,

位置:4

3、字符串的比较 (strcmp:区分大小写,strcmpi 不区分大小写)

说明:

1)该函数比较的是每一个字符的ASSIC吗

2)该函数返回的是一个int类型的数据,

  **0  :   代表相同;**

  **非0 :  代表不相同(  > 0 :表示前者大于后者  ;    < 0 : 表示后者大约前者);**
   char *cmpStr1="hElloworld";
    char * cmpStr2="helloworld";
    int result =strcmp(cmpStr1,cmpStr2);
    printf("字符串比较的结果:%d\n",result);

输出的结果:

字符串比较的结果:-1

4、字符串的转换 (atoi, atol 等在stdlib.h 下面)

说明:

1) 这些函数返回值是int类型, : 0 ---> 代表转换失败; 非0 ---> 代表转换成功;

    char* num="2";
    printf("字符串转化为整数的结果是:%d\n",atoi(num));

输出结果:

字符串转化为整数的结果是:2

5、字符串的表现(字符数组 与 字符指针)

说明:

1)字符数组 需要在数组尾部手动添加'\0'作为字符串的结束,否则尾部是系统提供的值,会出现乱码,而字符指针则系统会默认添加结束符,不再需要手动添加

2)字符数组可以通过下标直接修改数组元素的值,而字符指针如果使用下标的方式则会出现不允许访问的crash

3) 字符数组作为参数传递时,为了搞笑,会把数组优化成指针

4)C语言中比较少的使用返回值来返回函数的结果,而是通过将接受返回值的变量的地址传递进去,直接修改该变量内存地址中的值,这样效率会更高

//自定义一个获取字符串长度的函数
int getLength(char* string){
    int count =0;
    while (*string){//当没有找到字符串的\0结束符时,会一直循环
        string++;
        count++;
    }
    return count;
}

int main(){
    /**
    *  下面的代码可以看出在字符串数组中的结束符在统计长度时,不能统计进去
    */
    char moveStr[]={'h','e','l','l','o','\0'};
    printf("moveStr字符串的长度是: %d\n",getLength(moveStr));
    int length = sizeof moveStr /sizeof (char );
    printf("moveStr字符串的长度是: %d\n",length);
    
      //字符数组
    char str[]={'h','e','l','l','o','\0'};//TODO 此处不加入结束符,会在下面打印的时候出现莫名其妙的字符串
    str[0]='H';
    printf("字符数组的打印:%s\n",str);

    //字符指针
    char * strP="hello";
//    strP[0]='H';//TODO 此处会出现crash
    printf("字符指针的打印:%s\n",strP);
    
    return 0 ;
}

输出结果:

moveStr字符串的长度是: 5

moveStr字符串的长度是: 6

字符数组的打印:Hello

字符指针的打印:hello

好了,今天C语言中字符串操作我们就入门到这里了。

下节预告:C语言之文件操作

相关文章

  • NDK开发--C语言(字符串操作)

    做过程序猿的同学相信大家都对字符串不陌生,这玩意也是工作中使用非常频繁的,那么我们今天就来了解一下C语言中的字符串...

  • NDK开发---C语言(文件操作)

    说起文件操作,几乎所有的编程语言都会涉及到,而且也是很重要的,而我们今天就带大家来了解一下C语言中的文件操作。 温...

  • 关于NDK 开发C语言基础

    基本数据类型 前言 NDK 开发需要用到 C/C++ 语言,为什么需要这两个语言? 因为通过 NDK 开发能够解决...

  • Android NDK开发之旅1--C语言基础--基本数据类型

    前言 NDK开发需要用到C/C++语言,为什么需要这两个语言?因为通过NDK开发能够解决Java做不到或者Java...

  • iOS开发系列文章[转]

    C语言 iOS开发系列--C语言之基础知识 iOS开发系列--C语言之数组和字符串 iOS开发系列--C语言之指针...

  • Android 本地语言开发包

    NDK称为native development kit本地语言(C&C++)开发包。而与之相对应的则是Androi...

  • NDK—C语言IO操作

    前面讲解了C语言的结构体、联合体和枚举,虽然只是基础,但是对于开发NDK来说已经够用了,接下来我们来学习一下C语言...

  • 浅谈Android NDK

    NDK全称为native development kit本地语言(C&C++)开发包。而与之相对应的则是Andro...

  • C++学习笔记(1) 继承、多态、虚函数、析构方法

    最近开始学习 NDK 开发学习之前要就得先了解 C++ 语言啥是 C++ 呢?就是个面向对象版本的 c 语言管他是...

  • Android JNI、NDK实现

    一、前言为什么要使用jni、ndk?效率上 C/C++是本地语言,比java更高效代码移植,如果之前用C语言开发过...

网友评论

    本文标题:NDK开发--C语言(字符串操作)

    本文链接:https://www.haomeiwen.com/subject/mmxyjltx.html