C语言学习笔记 Day7(C5数组 & 字符串)

Day7 内容梳理:

Chapter 5  数组 & 字符串

5.1 数组

(1)基础概念

(2)多维数组

5.2 字符串 & 字符数组

(1)二者区别:

(2)字符串的输入函数(3种)

scanf():⭐比较万能

gets_s():

fgets()

三者比较:

(3)字符串的输出函数(2种)

puts():

fputs():

(4)计算字符串长度的函数


Chapter 5  数组 & 字符串

5.1 数组

(1)基础概念

        格式1:数据类型 数组名[元素个数] = {值1, 值2, 值3...};

                 (元素个数处必须填常量,或者空着,填赋了值的变量不行)

        格式2:数据类型 数组名[ ] ={值1, 值2……};

        数组下标:数组名[下标]

        (下标的含义并不是索引,而是偏移量,因此第一个元素的下标是0而非1)

        数组在内存中占的大小 = 数据类型*元素个数

        补充:如果没用完给定的个数,则剩下的值会初始化为0【代码3:int arr[10] = {1}】

(2)多维数组

①二维数组

        格式1:数据类型 数组名[行数][列数] = {值1, 值2, 值3};

        格式2:数据类型 数组名[行数][列数] = { {值1,值2},{值3,值4} };

        索引也是从0开始,比如:数组名[0][0] = {......};

②多维数组

        比如三维:数据类型 数组名[层][行][列] = {……};

5.2 字符串 & 字符数组

(1)二者区别:

        C语言中没有字符串这种数据类型,但可以通过字符数组(char数组)来替代。可以说字符串是一种特殊的char数组,特殊的点在于以\0结尾。

                以数字0结尾的char数组是一个字符串。

                没有以数字0结尾的char数组就只是普通字符数组

       

        需要注意的是,字符串一定以char数组的形式存在,但char数组未必一定是字符串。比如,如果以ASCII码的形式来存储char,输出的可能是符号而不是字符串。

        例子:这是个char数组,但它不是字符串。它包含'\0'是因为需要一个结尾符,否则就报错。

        例子:不包含'\0'所以导致报错

(2)字符串的输入函数(3种)

scanf():⭐比较万能

        scanf()遇到空格或换行就结束,因此如果输入的是hello world,则只会存入hello。

❗ scanf()可以通过手动添加表达式来实现不同功能。

(1)接收空格的功能:写个表达式让它忽略空格:

        注意符号:

                \n之前的是尖括号,打出方式是shift+数字6。

                另外,\n和尖括号之间不能有空格,否则也报错

        放大版:

(2)限定输入的字符个数:在%和s之间手动添加可输入的个数,以避免字符个数超了。

        比如:

#include<stdio.h>

int main(){
    char ch[10];      //限定了10个位置

    scanf(“%9s”, ch);   //限制读入9个字符

    printf("%s",ch);
    return 0;
}

gets_s():

可以接收带空格的字符串

fgets()

需要传入三个参数,分别是输入字符的存放位置(也就是字符数组)输入大小的限制(这里用sizeof()取了字符数组大小)指针(stdin)

三者比较:

gets_s()和fgets()都可以接受空格。scanf()将空格和回车作为字符串结束的标志,但是可以通过手动添加"%[^\n]"来接收空格。

fgets()从字符串中获取的字符也默认包含了\n,但是当元素个数超出数组限制时,就没有\n了。它的缺点是会将\n作为字符的一部分也输入数组。

另外,对scanf()手动添加各种约束是可以使其既安全又具备很多功能,只是添加起来比较麻烦。

(3)字符串的输出函数(2种)

puts():

        自带换行,遇到\0就停止。

fputs():

        需要传入两个参数,是输出字符的存放位置(所定义的char数组)指针(stdout)

(4)计算字符串长度的函数

        能计算第一个\0之前的有效长度。

        之前的其他函数都是stdio库的,而strlen()函数是string库的,因此需要加一行导入库的代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值