美文网首页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语言(字符串操作)

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