第5章 C语言的字符数组与字符串 (六)

发布于:2023-01-04 ⋅ 阅读:(260) ⋅ 点赞:(0)

文档视频讲解链接地址

  1. 腾讯课堂链接 : 45_数组_二维数组与字符数组

5.6 字符数组与字符串

  1. 字符数组

    • 定义:字符数组是元素的数据类型为字符类型的数组,它既具有普通数组的一般性质,又具有某些特殊性质。
    • 例如:
    char c1[10] ;
    char c2[3][4];
    
  2. 字符数组的初始化

    • 逐个字符初始化
      01-c-66

    • 字符串常量初始化

      01-c-67

  3. 二维字符数组初始化
    01-c-68

  4. 实例58

    • 使用二维字符数组输出 ( Mon , Tue , Wed , Thu, Fri, Sat,Sun)
    • 源文件
    01-cbase\58-week.c
    
    • 源代码
    #include <stdio.h> 
    
    
    int main(int argc, char const *argv[])
    {
        char week[][5] = {"Mon","Tue","Wed","Thu","Fri","Sat","Sun"} ; // 二维字符数组, 每一行有5列 
        // 降维理解数组, week 是一个一维数组, 一共有7个元素, 
        // 分别是week[0],week[1],week[2],week[3],week[4],week[5],week[6] 
        // 每一个元素又有5个子元素
        // week[0][0],week[0][1],week[0][2],week[0][3],week[0][4]
        // week[1][0],week[1][1],week[1][2],week[1][3],week[1][4]
        // week[2][0],week[2][1],week[2][2],week[2][3],week[2][4]
        // week[3][0],week[3][1],week[3][2],week[3][3],week[3][4]
        // week[4][0],week[4][1],week[4][2],week[4][3],week[4][4]
        // week[5][0],week[5][1],week[5][2],week[5][3],week[5][4]
        // week[6][0],week[6][1],week[6][2] ,week[6][3],week[6][4]
    
        printf("sizeof(week)=%d\n",sizeof(week)) ;// 数组占用内存的字节数 , 一共7行 , 5列, 7*5 = 35 
        printf("sizeof(week[0])=%d\n",sizeof(week[0])) ; // week[0] 是一个一维数组的数组名 = 5   
        printf("week[0] = %s\n",week[0]) ; // 可以使用%s 来输出字符数组中的字符串, 只需要制定数组名即可 
        printf("***************************************************\n");
        // for 循环输出 Mon ... Sun 字符串 
        for(int i=0;i< sizeof(week)/sizeof(week[0]) ;i++)
        {
            printf("week[%d]=%s\n",i,week[i]);
        }
    
        return 0;
    }
    
    
    • ​ 运行结果
    sizeof(week)=35
    sizeof(week[0])=5
    week[0] = Mon
    ***************************************************
    week[0]=Mon
    week[1]=Tue
    week[2]=Wed
    week[3]=Thur
    week[4]=Fri
    week[5]=Sat
    week[6]=Sun
    
  5. 字符串

    在 C 语言中,字符串实际上是使用空字符 ‘\0’ 结尾的一维字符数组。因此,‘\0’ 是用于标记字符串的结束。

    01-c-69

  6. ‘\0’, 0, ‘0’ 的区别

    • ‘\0’ : 就是0 , 是ascii的0 , 是字符’0’经过转义来的 , 只是一种书写形式

    • 0 : 就是0 , 是ascii的0 , '\0’和0 是等价的, 只是不同的书写方式

    • ‘0’ : 是字符0 , ascii的48

  7. 字符串的输入与输出

    • 逐个字符输入与输出: %c

      • 例如 :
      char   str[5];
      
      for(int i=0;i<5;i++)
          scanf("%c", &str[i]);
      for(int i=0;i<5;i++)
          printf("%c", str[i]);
      
    • 整个字符串输入与输出:%s
      01-c-70

    • 字符串输出遇到多个‘\0’时

      • %s输出时遇到第一个‘\0’结束
        01-c-71
  8. 实例59

    • 输入一个字符串,然后将其逆序输出。
    • 源文件
    01-cbase\59-str.c
    
    • 源代码
    #include <stdio.h>
    
    int main(int argc, char const *argv[])
    {
        char str1[100] = {0};
        printf("请输入一个字符串 >:");
        scanf("%s", str1); // 只有%s时, 地址符号不用 , 是因为数组名本身就是地址了, 所以就不要了
        printf("str1=%s\n", str1);
    
        // 把str1 的内容逆序 , 先要计算字符的个数 , 可以使用while循环去计算字符个数 , 遇见'\0'结束
        int len = 0;
        while (str1[len] != '\0')
            len++;
        printf("len=%d\n",len); // i就是字符创的长度 
    
        char t; 
        for(int i=0;i<len/2;i++)
        {
            t = str1[i] ; 
            str1[i] = str1[len-1-i] ; 
            str1[len-1-i] = t; 
        }
        printf("str1=%s\n", str1);
    
    
        return 0;
    }
    
    
    • ​ 运行结果
    请输入一个字符串 >:goodbye
    str1=goodbye
    len=7
    str1=eybdoog
    
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到