字符与字符数组
1字符的概念和使用
字符是什么
观察键盘上的键,分为4种:
字母:a b c … z
数字:0 1 2 … 9
标点:+ - * / ; , . 等等
控制字符: Tab, Enter 等等
字符的存储
3.3讲:
计算机只能存储0和1
0000 0000 ~ 1111 1111
于是想到一个办法:用数字来代表字符
例如,65 ‘A’
当内存中存储 0100 0001(十进制65)时,它代表 了字符‘A’
字符的打印
• 想把一个字符显示如来,
• printf(“%c”,65);
ASCII码表
把键盘上所有的字符用一个数字来表示,制定了一个表,称为ASCII码表。
字符 | ASCII码 |
---|---|
‘A’ | 65 |
‘a’ | 97 |
‘0’ | 48 |
‘+’ | 43 |
‘ ‘ | 32 |
‘\t’ | 9 |
ASCII码数值范围比较小,所以用char型足够可以表示, char ch = 65;
字符常量
• ASCII码表无需记忆
char ch = ‘A’;
char ch = 65;
char ch = 0x41;
效果一样
• 用字符常量来表示ASCII码,加单引号
‘A’ ‘a’ ‘0’ ‘1’ ‘+’ ‘\t’
字符常量
• 例如,
• printf(“%c %c \n”, ‘A’,65);
• char ch = ‘B’;
• printf(“%d \n”, ch);
• // 打印空格
• printf(“%c%c%c”,‘1’,‘ ’,‘2’);
• // 打印加号
• printf(“%c%c%c”,‘1’,‘+’,‘2’);
转义字符
• 引例:如何换行打印呢?
• 想输出3行
1
2
3
printf(“%c%c%c”,‘1’,‘2’,‘3’); ???
转义字符 • 存在一些特殊字符: • ‘\n’表示换行 • ‘\t’表示Tab • ‘\”’双引号 • ‘\\’反斜杠 • printf(“%c%c%c”,‘1’,‘\n’,‘2’, \n’);
小结
• 在计算机里,用数字来代表字符。
• 字符常量:‘A’,‘0’, …以单引号括起来, 它们本身就代表了一个数字
• 用%c来打印一个字符
• 特殊字符(转义字符) • 前面加反斜杠 ‘\n’
2字符数组
字符数组
用char型数组来表示“一串字符”
两种初始化方法:
(1) 像普通数组一样初始化
char str[6] = { ‘h’, ‘e’, ‘l’, ‘l’, ‘o’,’`\0` };
(2) 特殊的初始化方法
char str[6] = “hello”;
注:在内存窗口里查看
当作字符串打印
char str[6] = “hello”;
printf(“%s”,str);
① 加入特殊字符(转义字符)
char str[] = “hello \n123 \n”;
char str[] = “my name:\”shaofa\””;
char str[] = “d:\cpp\hello\”;
字符串结束符’\0’
• printf在打印一串字符时,遇到’\0’结束 (也就是数字0
)
char str[6] = “hello”;
str[2] = 0; // 中间插入一个0
printf(“%s”,str);
字符串长度
• 从头开始,一直到结束符0,中间的字符数。
• char str[6] = “hello”; // 长度是多少有效字符
?
• str[2] = 0; // 长度是多少?
字符串结束符’\0’
• 如果一串字符没有以0结束,则printf会一直尝试 打印下去。。。
• char str[6] = { ‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘A’ };
• printf(“%s”,str);
注意事项
• (1) 数组要足够大: length + 1
• char str[128] = “hello”; // !!错,不够大
• (2) 不以0结束的字符串,不是正常的字符串
• (3) 0之后的字符不会被打印出来