登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 第七章:字符与字符串

[复制链接]
发表于 2017-1-19 15:09:41 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C语言
学习安排: 详见:http://bbs.hpuedd.com/forum.php?mod=viewthread&tid=837&fromuid=385
开始时间: 2017-01-17
结束时间: 2017-01-17
在说之前,希望先准备一张ASCII码表
(我上次写的小程序也可以凑合着用,我写的是标准ASCII码0~127位)
先谈一下char类型,它是字符类型
也就是专门用来存储字符的
然而我前几章说过
机器只能存储数值
那么这就是ASCII码表的作用
将字符转换为数值存入,再转换为字符读出
%c是标准输入输出占位符中的字符格式占位
也就是说,我们可以进行诸如
1-1.png
这样的字符数据操作
那么这里就有一个问题
如图:
1-2.PNG
问:当我输入‘1’时,结果为什么是49?
答:看一下ASCII码表,字符‘1’对应的值为49
也就是说,此时你输入的不再是数值,而是字符
字符可以进行运算吗?
可以
但如果你写
‘1’+‘2’=?
它会给你一个字符‘c'
为什么?
这就相当于49+50=99
而99所对应的字符是’c'
可以试一试
1-3.PNG
没问题
但是众所周知1+2=3
所以,当进行输入时,切记到底是数值还是字符
如果想将字符转换成数值的话,需要写转换程序,帖子后面的附件中有,但是希望能自己先打一份,再来比对
还有一种字符输入输出的方式
getchar()
putchar()
也是一对但其形式稍有不同
x=getchar();
putchar(x);
(PS:这牵涉到函数的传参与返回值问题,暂可不必深究)
如:
1-4.PNG
换行符,在ASCII码中也有定义,也就是说,机器把它也当成字符
感兴趣可以对照ASCII码表试试
可是,在自然界中,单单一个符号表达能力非常有限
于是就有了字符的概念
可以理解为穿成串的字符
学习了字符我们可以模拟这个过程
如:
1-5.PNG
(这里a[0]没有用,所以输出时将a[0]跳过了)
没问题,但是非常繁琐
用到了两个循环
现在,有一个更简单但只适用于玩具程序的输入输出语句
gets(x);
puts(x);
这是一对字符串输入输出函数
gets()比scanf()有一个优点,就是可以输入空格
(例子略,可以自己去试试)
有了这一组函数,我们就可以非常轻松地进行输入输出
如:
1-6.PNG
但是有两个问题
1.数组当中单单写出a代表什么
2.puts()为什么输到‘d'就停了
答1:上章我们说到数组开辟的是连续的空间,当写a(数组名)时就代表整个数组起始的地址(房号)
gets()只需要进行依次输入就可以
答2:因为有'\0'这个符号限制输出,当puts()读到“尾零”时自动停止输出并加上'\n'
那么尾零哪来的?
gets加上的,他将我们输入的'\n'换为了'\0'
上上面的例子告诉我们当你输入完字符串时会进行回车,那个例子也就是用这种习惯进行逻辑循环
尾零,也算是一种字符,它也需要存储空间
所以,当你计算数组大小时要所有字符+1
这个1,就是给尾零留的
如:
1-7.PNG
这就是尾零的作用
(此处整体赋值时,花括号可以省略,字符串一般用“”(双引号)表示,字符一般用‘’(单引号)表示)
为了使字符串的处理变得更方便
C语言还有一个库文件,专门用来处理字符串
<string.h>
一些相对重要的函数如
strcat(字符串数组名,字符串);
strcpy(字符串数组名,字符串);
strcmp(字符串1,字符串2);
strlen(字符串);
等,在上方连接中都有其具体用法,而且介绍也比较详细,在此就不赘述了。
(PS:它写的括号中的东西暂时用上述汉字取代,以后会说到,感兴趣可以去看看指针与函数这两章)

小结:
输入两组学生信息,并输出
参考程序,见附件



简易转换.txt

172 Bytes, 下载次数: 475

单字符转换,仅供参考,可以使用循环进行多字符转换

表单.txt

335 Bytes, 下载次数: 470

非常麻烦的表单,请自行制作简易版

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表