NDK开发

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

2021-06-11  本文已影响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语言之文件操作

上一篇下一篇

猜你喜欢

热点阅读