<C> 数组02 - 2017/11/18

数组  --> 数组定义

    如:

      类型 数组名[数组大小 ]

char arr[12]; // 定义数组 < arr array>

    // 字符数组

    %s     用于字符数组

 

    char数组 --> 存的是单个字符

 

    "hello" 双引号括起来的  叫做字符串  后面有一个 \0 

    字符串是用字符数组存储的

 

    如果字符数组中没有 \0 那么不能使用字符串函数 %s

 

    %s --> 打印后面的所有字符直到遇到 \0

 

    字符数组是唯一一个可以直接赋值的数组

    比如:gets   scanf

 

1.字符数组和普通数组的区别和联系:

    普通数组  --> 循环单个单个给元素赋值  后面没有 \0

    字符赋值  --> 用函数整体赋值   后面一定有 \0

 

2. '\0'字符   结束标记 --> 只占一位

    scanf 或者 gets   一定会有

    char arr[5] = {'H','e','l','l','o'};    // 长度够也会有(留位置给\0)\

 

    如果单个字符单个字符赋值进来 --> 记得手动添加 \0

3.scanf遇到空格会结束字符串的输入

    gest 遇到空格也不会结束输入

    --> 如果输入的字符串中有空格 -> 记得用 gest 函数  -->  回车结束输入

 

4.字符数组的操作:

    赋值  --> 直接赋值

char arr[10] = "hello";   // 如果字符数组 -> 大小没写 会根据赋值时候的长度来确定
char arr[] = "";   // 这样赋值长度为:1

 

    用函数赋值 -> scanf("%s",arr);    // 不需要加取地址

printf("%s",arr);
scanf_s("%s",arr,10);

     gets/gets_s    --> 输出字符串 : puts(arr);

  strlen()函数在: string.h文件中

  长度测量:  strlen(arr)   遇到 \0 之前的字符个数(不算:\0)

  如果测量素组的大小   sizeof(arr)/sizeof(arr[0])   //  数组总字节/单个元素字节得到数组大小(一般不会用来计算字符数组长度)

char arr[10] = "hello";
sizeof(arr)/sizeof(arr[0]);      得到结果是10
strlen(arr)   得到结果5



 // sizeof(arr) 字符数组占用的空间  =字符数组大小*sizeof(char)

  字符串比较函数  --> string.h  // 不能使用 == 比较

  strcmp(字符串1,字符串2) == 0   两个字符串是一样的  返回值是一样的

char arr[] = "hello\0wor\'ld"; 
char brr[10] = "hello";
if (strcmp(arr, brr) == 0)
{
    printf_s("%]两个字符串是一样的");
}

    拷贝函数:strcpy(字符串1,字符串2)   把字符串2的内容拷贝到字符串1里面

        如果字符串1有内容 会覆盖掉之前的内容

 

    连接函数:strcat(字符串1,字符串2)  字符串2的内容拷贝到字符串1的后面

      连接之后  字符串1可能越界   所以连接的时候要注意一下字符串1的大小

  PS:a)
      旧版函数和新版函数
       scanf_ gets_s _s safer更安全
      b) 输入的时候 \0 存的时候\\0
        输入的时候 \ 存的字符 '\\'

      代码书写的时候 '\\' 存ASCII '\n'

      c) 数组大小:数组能够存放的元素的最大个数(超出了就越界)
        字符串长度 字符串\0前的元素个数

      d) 转义字符 --> 代码 字符串中表示某些字符
        '\t' 只算一个字符
        输入的时候 "hello\""
        \+ 其他字符
        \t 制表符
        \n
        \a
        \\
        \0
        \'
        \"
        输入的时候 \0 --> \
        '\\' --> \
        存放 --> 存放ASCII码
        在代码中表示 转义

代码块:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
#if 0
    char arr[5] = { 'H', 'e', 'l', 'l', 'o' };   // 数组长度是:10   不足赋值:0
    //char arr[10] = { "Hello" };   // Hello 后面有一个 \0  也算长度 {}可以不要
    // ASCII    0 对应的字符 '\0'   字符串的结束符号  也占用一个字符长度
    // '\0' 前面的是有效字符
     
    arr[1] = '2';          // 直接给数组元素赋值
    //scanf_s("%s", arr);  // 字符数组名  不需要取地址 (遇到空格会结束)
    //gets(arr);           // 填数组名
    gets_s(arr,10);      // 10  数组最多能接受字符的个数  -->  实际上只能输入9个
    getchar();

    printf_s("%s\n", arr);
    // 用循环打印
    /*for (int i = 0; i < 5; i++)
    {
        printf_s("%c", arr[i]);
    }
    */

#elif 0
    char arr[] = "hello\\world";   // arr大小  strlen 打印

    puts(arr);
    printf_s("%d", strlen(arr));


#elif 1
    char arr[] = "hello\0wor\'ld";
    //char crr[] = "hel\"lo";   // 表示输出时是:hel"lo
    char crr[10];
    strcpy_s(crr, arr);    //  拷贝
    //strcat_s(crr, arr);  //  连接
    puts(crr);

    char brr[10] = "hello";
    if (strcmp(arr, brr) == 0)
    {
        printf_s("两个字符串是一样的");
    }

    printf_s("%s\n", crr);


#endif

    getchar();
    return 0;
}

 

posted @ 2017-12-22 10:37  让优秀成为一种习惯  阅读(145)  评论(0编辑  收藏  举报