• C语言tips-字符串数组


    最近因为工作需要开始重新学c语言,越学越发现c语言深不可测,当初用python轻轻松松处理的一些数据,但是c语言写起来却异常的复杂,这个板块就记录一下我的c语言复习之路

    1. 字符串

    字符串是连续的字符序列,最后以空字符’\0’作为终止符。一个字符串的长度指所有字符的数量,但不包括终止符。在 C 语言中,没有字符串类型,自然也就没有运算符以字符串为操作数。

    2. 定义时就初始化初始化

    // 方式一:必须指定第二维的大小,且应大于等于数组最长字符串的长度
    char str_arr1[][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; 
    // 方式二 用指针的方式
    char *str_arr2[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    
    • 1
    • 2
    • 3
    • 4

    字符串数组char *表示的字符串有什么区别呢?它们最根本的区别是在内存中的存储区域不一样,字符数组存储在全局数据区或栈区,第二种形式的字符串存储在常量区。全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限,而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限

    3. 手动输入初始化

    • 利用二维数组
        char str_arr[][100];
        int i, j, ch
        for (i = 0; i < sizeof(str_arr)/sizeof(str_arr[0]); i++)
        {
            printf("请输入%d句话:", i+1);
            for (j = 0; (ch = getchar()) != '\n'; j++)
            {
                slogan[i][j] = ch;
            }
            slogan[i][j] = '\0';
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 指针方式
        char *num[5]={""};
        for(int i = 0;i < 5;i++)
        {
            num[i]=(char*)malloc(20);
            scanf("%s",num[i]);
        }
        for(int i = 0; i < 5; i++)
        {
            printf("%s\n", num[i]);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4. 字符串数组的遍历

    #include 
    #include 
    int main()
    {
        // 方式一:必须指定第二维的大小,且应大于等于数组最长字符串的长度
        char str_arr1[][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
        printf("方式一遍历:");
        printf("%d", sizeof(str_arr1));
        for(int i = 0; i < sizeof(str_arr1)/sizeof(str_arr1[0]); i++)
        {
            printf("%s ", str_arr1[i]);
        }
        printf("\n");
        // 方式二
        char *str_arr2[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
        printf("方式二遍历:");
        for(int i = 0; i < sizeof(str_arr2)/sizeof(str_arr2[0]); i++)
        {
            printf("%s ", str_arr1[i]);
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    遍历比较简单,就数组取值就行,但我还在一个博客上看到另外一种方式,即在字符串数组最后去赋值一个NULL,代码如下

    char *str_arr2[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", NULL};
    char **str = str_arr2;
    while (*str != NULL)
    {
        printf("%s\n", *str++);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    可以看到c语言的字符串数组里面的东西还是非常多的,以上就是字符串数组的一些理解和记录
    参考文章:
    https://zhuanlan.zhihu.com/p/377633216
    http://c.biancheng.net/view/1829.html

  • 相关阅读:
    Pytorch 实战 LESSON 4 张量的线性代数运算
    Unity 游戏设计模式:观察者模式
    R语言-关于颜色
    Balanced Multimodal Learning via On-the-fly Gradient Modulation(CVPR2022 oral)
    c++builder6.0 数据库查询函数select * into 功能的实现
    多账户管理最全面的解决方案
    《Span-Based Joint Entity and Relation Extraction with Transformer Pre-Training》阅读笔记
    基于Android课堂作业师生交流教学选课助手java mysql
    C++类型转换运算符
    sqlalchemy_No1_简介及快速入门
  • 原文地址:https://blog.csdn.net/weixin_46187354/article/details/127967059