Day7 记录

目录

7.4 字符数组

7.4.1 字符数组的定义

7.4.2 字符型数组的基础算法

7.4.2.1 字符串遍历

7.4.2.1.1 puts()函数

7.4.2.1.2 gets()函数

7.4.2.2 strlen()函数

7.4.2.3 strcpy()函数赋值

7.4.2.4 strcat()函数拼接

7.4.2.5 strcmp()函数比较字符串ascii码的大小

7.4.2.5 逆序

7.4.3 二维数组

7.4.3.1 二维数组算法(计算行数,列数)

7.4.3.2 二维数组算法(平均数)


第七章的剩余部分

7.4 字符数组

      用来存放字符的数组是字符数组。主要用途有:处理文本,装字符串等。

7.4.1 字符数组的定义

      字符数组的定义方法与上篇记录的整型数组类似。

      不同之处:

    (1)默认在字符数组的末尾加上一个不可见的字符'\0',作为整个字符串结束的标志。

       

        如上图所示:整个字符串所占的字节是14个字节而不是13个字节,因为字符串末尾会默认加上’、0‘。此外“”双引号引起来的是字符串常量,不能更改。

数组初始化的过程如上图所示

格式为:类型说明符 数组名[常量表达式];

需要注意的是:数组定义的空间要足够大才可以。不然会造成越界访问,从而产生严重的错误。

那么我们要解决的问题是,如何那字符数组存放一段真正的字符串?而非字符串常量呢。

7.4.2 字符型数组的基础算法

7.4.2.1 字符串遍历

7.4.2.1.1 puts()函数

如图所示:putchar(int)实参应为int型,若放一个字符型会自动转为int型。

也可以通过调用puts(char *)函数来实现上述功能。

7.4.2.1.2 gets()函数

从键盘输入字符串的方式可以简单使用三种函数scanf(s),gets(s),fgets(s,sizeof(s),stdin).s为数组,sizeof(s)是数组s所占的字节数。

需要注意的是:

(1)若输入字符串长度超过数组的容量,虽然gets函数可以正常调用,但会导致越界访问

(2)调用scanf函数时,若输入换行符、空格、回车和tab键都会默认为结束。

(3)gets()函数不会输出回车。

可以根据自身的需要来进行选择。

7.4.2.2 strlen()函数

strlen函数统计当前的有效字符个数。

因为中的字符串有效字符数一定不会是负数,故定义一个unsigned变量更为准确。s[100]是创建一个足够大空间的数组。

此外需要注意的是:

真正打印在终端的都是字符串(文本)。

如 : int i = 1234;此时i里面装的是 1234的补码。

         int i[] = "1234",此时i里面装的是'1','2'...的ascii码。

         故:puts(1234) 是错误的

                正确的应该是puts("1234"),"1234"是匿名数组,是常量只能为右值。

          printf打印也是要把 1234 转变为"1234"才可以打印。

7.4.2.3 strcpy()函数赋值

算法思想如下:将数组s1的元素赋给数组s2.从s1中依次逐个拿出对应位置的有效字符赋给s2。并在拷贝过程结束后,在s2中的有效元素后补一个'\0'。

strcpy(目标,源)函数同样能够实现上述过程。把源数组内的字符拷贝到目标数组内。

7.4.2.4 strcat()函数拼接

把数组s2拼接到数组s1的后面,先while循环确定s1中有几个有效字符,此时循环结束时的i是原s1数组中‘\0’的下标。

再进行一次while循环,并把s2[j]的值赋给s1[i],初始的j=0;再进行++i,++j,直至s2中再无有效字符。

此时s1中的有效字符后并无‘\0’,为随机数,故手动加上‘\0’,s1[i] = '\0'

同样,通过调用strcat()函数也可以实现上述功能。

char *strcat(目标,源)

7.4.2.5 strcmp()函数比较字符串ascii码的大小

int strcmp(s1,s2)

调用strcmp函数是会返回三个结果:返回值为s1[i] - s2[i]

(1)返回值>0  s1 > s2

(1)返回值=0  s1 = s2

(1)返回值<0  s1 < s2

7.4.2.5 逆序

逆序的实现与整型数组类似。

实例:判断三个数组谁大

7.4.3 二维数组

二维数组(整型/字符串)本质是数组的数组。

例:a[3][4]为三行四列的表格,有三个元素(有三个一维数组)

引用方式 是从0开始

例:从a[0][0] = 1开始逐一递增赋值。

a[0]的地址比a[1]的地址小

a[0][1]是第一个一维数组的第二个元素。

注意:二维数组同样不得被整体访问,需要两个for循环来遍历

第一个花括号里初始化a[0]向后递增,有三个元素,每一个元素都是长度为4的一维数组。
注意:初始化二维数组时不加花括号也行。但若想让中间元素为0 就不行了,只能省略行数,不能省略列数。tips/:只能省略靠近变量名的那个


7.4.3.1 二维数组算法(计算行数,列数)

实现动态分析

7.4.3.2 二维数组算法(平均数)

53行有错误 后面应为(float)(sum)/couter。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值