11 C字符串

2018-10-30  本文已影响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;
}
上一篇下一篇

猜你喜欢

热点阅读