美文网首页
11 C字符串

11 C字符串

作者: 亨锅锅 | 来源:发表于2018-10-30 13:07 被阅读0次

    1、字符串的本质

    #include <stdio.h>
    
    int main()
    {
        /*
         * 1.字符串?
         * 将字符串到一起就是字符串, 有序 / 同类型的   --> 数组
         * 其实C语言中的字符串就是一个特殊的数组而已
         *
         * 2.特殊在什么地方?
         * 如果你想用数组来表示字符串, 那么数组必须是char类型, 而且的最后一个元素必须是\0
         *
         * 3.由于字符串比较特殊
         * 所以在C语言中除了可以用字符数组来表示字符串以外, 还可以用""来表示字符串
         *
         * 什么是羊肉串? 什么是牛肉串?
         * 羊肉串和牛肉串的特点:
         * 只要将肉串到棍子上之后, 肉就是有序的, 并且棍子上串的都是肉
         * 提炼:   有序 / 同类型的   --> 数组
         */
    
        // 以下就是一个字符串
        char str1[] = {'m', 's', 'h', '\0'};
        // 以下是一个字符数组, 不是字符串
        char str2[] = {'m', 's', 'h'};
        // 以下是字符串
        // 如果在定义的同时部分初始化, 那么没有被初始化的元素会自动赋值为0
        // \0的ASCII码就是0
        char str3[10] = {'m', 's', 'h'};
        // 以下是字符串
        char str4[] = "msh"; // 底层就是 {'m', 's', 'h', '\0'};
    
        // %i -> int, %c -> char, %f -> float,  %s -> string
        // %s会从数组的第0个元素开始打印, 知道遇到\0为止
        printf("str = %s\n", str2);
    
    //    printf("%i\n", '\0');
        return 0;
    }
    
    #include <stdio.h>
    
    int main()
    {
        // 以下就是一个字符串
        char str1[] = {'z', 'q', 'x', '\0'};
        // 以下是一个字符数组, 不是字符串
        char str2[] = {'w', 'b', 'd'};
        // %s会从数组的第0个元素开始打印, 直到遇到\0为止
    //    printf("str1 = %s\n", str1);
    //    printf("str2 = %s\n", str2);
    
    //    int index = 0;
    //    while(str2[index] != '\0'){
    //        printf("%c", str2[index]);
    //        index++;
    //    }
        return 0;
    }
    

    2、字符串的输出、输入

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        /*
         * 1.输出
         * 2.输入
         * 3.计算字符串长度
         */
    //    char str[] = "msh";
        // printf + %s输出不会自动换行, 必须手动添加\n
        // printf + %s可以添加自定义内容
    //    printf("str = %s", str);
        // puts输出会自动换行
        // puts输出不能添加自定义内容
    //    puts(str);
    //    printf("参考的内容");
    
    
    //    char str[10];
        // scanf + %s 接收用户输入的数据
        // scanf + %s 接收字符串, 输入的数据中不能有空格/TAB/回车, 系统会将如上三个符号当做结束符号
    //    scanf("%s", &str);
        // gets 接收字符串, 可以输入空格/TAB
    //    gets(str);
    //    printf("str = %s", str);
    
        char str[] = "msh"; // {'m', 's', 'h', '\0'}
    //    int len = sizeof(str) / sizeof(str[0]); // 4
    ////    printf("len = %i\n", len);
    //    for(int i = 0; i < len; i++){
    //        printf("%c\n", str[i]);
    //    }
    //    printf("msh.com\n");
    //    int length = strlen(str);
    //    printf("length = %i\n", length);
    
        // : 自己写代码实现strlen函数
    
        return 0;
    }
    

    3、常用方法

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    //    char str1[6] = "msh";
    //    char str2[6] = "msh.com";
    
        // 字符串拼接
        /*
        // 传入两个数组, 会将后面一个数组拼接到前面一个数组的后面
        // 注意点: 前面一个数组必须足够长, 否则在企业开发中会引发一些未知的BUG
        // strcat(dest, src)
    //    strcat(str1, str2);
    //    printf("str1 = %s\n", str1);
    //    printf("str2 = %s\n", str2);
    
         // 会将src中的count个字符拼接到dest后面
    //    strncat(dest, src, count)
        int size = sizeof(str1)/sizeof(str1[0]); // 字符数组可以存储多少个元素
        int len = strlen(str1); // 除了\0以外存储了多少个元素
        int count = size - len - 1; // -1给\0留位置
    //    printf("size = %i\n", size);
    //    printf("len = %i\n", len);
    //    printf("count = %i\n", count);
        strncat(str1, str2, count);
        */
    
        // : 自己写代码实现strcat函数
    
        // 字符串拷贝
        /*
        // 会用将src中的字符拷贝到dest中, 覆盖掉dest中原有的内容
        // 注意点: 前面一个数组必须足够长, 否则在企业开发中会引发一些未知的BUG
        // strcpy(dest, src);
    //    strcpy(str1, str2);
    //    printf("str1 = %s\n", str1);
    //    printf("str2 = %s\n", str2);
        */
    
        // : 自己写代码实现strcpy函数
    
        // 字符串比较
        // 会依次从第0个索引开始, 取出str1和str2中每个元素进行比较
        // 如果str1当前的元素大于str2当前的元素, 那么返回一个正数
        // 如果str1当前的元素小于str2当前的元素, 那么返回一个负数
        // 如果str1当前的元素等于str2当前的元素, 那么返回0
    //    strcmp(str1, str2);
    
        char str1[6] = "124";
        char str2[6] = "133";
        int res = strcmp(str1, str2);
        printf("res = %i\n", res);
    
        // : 自己写代码实现strcmp函数
        return 0;
    }
    

    4、字符串数组

    
    #include <stdio.h>
    
    int main()
    {
        /*
         * 字符串数组
         * 字符串就是一个数组, 所以保存字符串数组就是二维数组
         */
        char str1[] = {'a','b','c','\0'};
        char str2[] = {'w','b','d','\0'};
        char str3[] = {'d','e','f','\0'};
    
    //    char str[] = {
    //        {'a','b','c','\0'},
    //        {'w','b','d','\0'},
    //        {'d','e','f','\0'}
    //    };
    
        char str[] = {"abc", "lnj", "def"};
    
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:11 C字符串

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