美文网首页Android高级技术Android开发Android开发
Android NDK开发之旅5--C语言--字符串

Android NDK开发之旅5--C语言--字符串

作者: 香沙小熊 | 来源:发表于2017-10-16 16:39 被阅读145次

    C语音的字符串有两种:

    字符数组

    数组可以修改其中某一个值,不可以整体赋值。
    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <Windows.h>
    
    //使用字符数组存储字符串
    void  main() {
    
        //三种写法
        //\0代表 结束符
        char str[] = { 'h','e','l','l','o','\0' };
        //char str[6]= { 'h','e','l','l','o' };
        //char str[10] = "hello";
    
        printf("%s\n", str);
        //地址
        printf("%#x\n", str);
        getchar();
    }
    
    结果输出:
    
    hello
    0xb3fb78
    
    

    字符指针

    字符指针不可以修改其中某一个值,可以整体赋值。使用指针加法,结合结束符,可以进行截取。
    void main() {
        char *str = "how are you?";
        printf("%s\n", str);
        //str[1] = "w" ; //字符指针不可以修改其中某一个值
    
        str = "hello world";
        printf("%s\n", str);
        printf("%#x\n", str);
    
        //使用指针加法,截取字符串
        str += 3; //指向第四个字符首地址
        while (*str) {
            printf("%c", *str);
            str++;
    
        }
        getchar();
    }
    结果输出:
    
    how are you?
    hello world
    0x97b44
    lo world
    
    

    字符串常用的方法

    在线手册:http://www.kuqin.com/clib/
    相关的头文件:#include <string.h>

    strcpy字符串拼接

    原型:extern char *strcpy(char *dest,char *src);

    功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

    说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
    返回指向dest的指针。

    举例:

    
    void main(void){
        char dest[50];  
        char *a = "china";
        char *b = " is powerful!";
        strcpy(dest, a);
        strcat(dest, b);
        printf("%s\n", dest);
    
        system("pause");
    }
    结果输出:
    
    china is powerful!
    
    

    strchr字符串中查找字符

    原型:extern char *strchr(char *s,char c);

    功能:查找字符串s中首次出现字符c的位置

    说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。

    void main(void){
        char *str = "I want go to USA!";
        printf("%#x\n", str);
        //U元素的指针
        //str+3
        char* p = strchr(str, 'w');
        if (p){
            printf("索引位置:%d\n", p - str);
        }
        else{
            printf("没有找到");
        }
    
        system("pause");
    }
    
    结果输出:
    
    0x877b30
    索引位置:2
    
    

    strchr字符串中查找字符

    原型:extern char *strstr(char *haystack, char *needle);

    功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。

    说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。

    //strstr 从字符串haystack中寻找needle第一次出现的位置
    
    void main(void){
        char *haystack = "I want go to USA!";
        char *needle = "to";
        //U元素的指针
    
        char* p = strstr(haystack, needle);
        if (p){
            printf("索引位置:%d\n", p - haystack);
        }
        else{
            printf("没有找到");
        }
    
        system("pause");
    }
    结果输出:
    
    索引位置:10
    
    

    更多用法...

    //strset 把字符串s中的所有字符都设置成字符c
    void main(void){
        char str[] = "internet change the world!";
        _strset(str,'w');
        printf("%s\n",str);
        system("pause");
    }
    
    //strrev 把字符串s的所有字符的顺序颠倒过来
    void main(void){
        char str[] = "internet change the world!";
        _strrev(str);
        printf("%s\n", str);
        system("pause");
    }
    
    //atoi 字符串转为int类型
    //atol():将字符串转换为长整型值
    void main(void){
        char* str = "a78";
        //int r = atoi(str);    
        printf("%d\n", r);
    
        system("pause");
    }
    
    // 字符串转为double类型
    void main(void){
        char* str = "77b8b";
        char** p = NULL;
        //char* p = str + 2;
        //参数说明:str为要转换的字符串,endstr 为第一个不能转换的字符的指针
        double r = strtod(str,p);
        printf("%lf\n", r);
        printf("%#x\n", p);
    
        system("pause");
    }
    
    //strupr转换为大写
    void main(void){
        char str[] = "CHINA motherland!";
        _strupr(str);
        printf("%s\n",str);
        system("pause");
    }
    
    //转换为小写
    void mystrlwr(char str[],int len){
        int i = 0;
        for (; i < len; i++){
            //A-Z 字母 a-Z
            if (str[i] >= 'A' && str[i] <= 'Z'){
                str[i] = str[i]-'A' + 'a';
            }
        }   
    
    }
    
    
    void main(void){
        char str[] = "CHINA motherland!";
        mystrlwr(str,strlen(str));
        printf("%s\n", str);
        system("pause");
    }
    
    //练习:删除字符串中指定的字符
    void delchar(char *str, char del){
        char *p = str;
        while (*str != '\0') {
            if (*str != del) {
                *p++ = *str;
            }
            str++;
        }
        *p = '\0';
    }
    
    
    //删除最后一个字符
    int main()
    {
        char str[] = "vencent ppqq";
    
        delchar(str,'t');
        printf("%s\n", str);
        
        system("pause");
    }
    
    //Java String replaceAll 
    //StringBuffer buff.deleteCharAt(buff.length()-1);
    //删除最后一个字符
    void main(void){
        char str[] = "internet,";
        str[strlen(str) - 1] = '\0';
        printf("%s\n", str);
            
        //作业:realloc实现StringBuffer的拼接,而不是一开始开辟一个很大的数组
        //结构体StringBuffer 
    
        system("pause");
    }
    
    //memcpy 由src所指内存区域复制count个字节到dest所指内存区域
    void main(void){
        char src[] = "C,C++,Java";
        char dest[20] = {0};
    
        //字节
        memcpy(dest,src,5);
        
        printf("%s\n",dest);
        system("pause");
    }
    
    //memchr 从buf所指内存区域的前count个字节查找字符ch。
    void main(void){
        char src[] = "C,C++,Java";
        char ch = 'C';
    
        //字节 (分段截取)
        char* p = memchr(src+3, ch, 5);
        if (p){
            printf("索引:%d\n", p - src);
        }
        else{
            printf("找不到\n");
        }
    
        
        system("pause");
    }
    
    //memmove 由src所指内存区域复制count个字节到dest所指内存区域。
    void main(){
        char s[] = "Michael Jackson!";
        //截取的效果 
        memmove(s, s + 8, strlen(s) - 8 - 1);
        s[strlen(s) - 8] = 0;
        printf("%s\n", s);
        getchar();
    }
    
    //在字符串s1中寻找字符串s2中任何一个字符相匹配的第一个字符的位置,空字符NULL不包括在内
    void main(){
        char *s1 = "Welcome To Beijing";
        char *s2 = "to"; 
        char *p;
    
        p = strpbrk(s1, s2);
        if (p)
            printf("%s\n", p);
        else
            printf("Not Found!\n");
    
        p = strpbrk(s1, "Da");
        if (p)
            printf("%s", p);
        else
            printf("Not Found!");
    
        getchar();
    }
    

    相关文章

      网友评论

        本文标题:Android NDK开发之旅5--C语言--字符串

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