C语言程序设计笔记---004
C语言初识字符串/转义字符/%*的作用/%#的作用/注释的概念
/知识点汇总/
1、初识字符串
字符串就是双引号引起来的一串字符
如:“abcdefg” “好好学习,天天向上” 由双引号引起来的字符为字符串
注意:字符串的结束标志是\0的转义字符,在计算字符串长度时,不计入计算。而字节大小需计入计算。
代码1.1、字符串数组的输出:
//字符数组—数组内放相同类型的元素
//基于vs2013编译器,F10调试程序查看进程,得到“hello”的字符串所占用大小以及结束标志位。
/*例程1.1*/
#include <stdio.h>
int main()
{
char arr[] = "hello";
//%s字符串格式符
//打印字符串
printf("%s\n", arr);
}
调试观察字符结束标志位‘\0’:
代码1.2、强调字符串’\0’结束标志位:
/*例程1.2*/
#include <stdio.h>
int main()
{
char arr1[] = "abc";//定义一个双引号的字符串的数组
char arr2[] = { 'a', 'b', 'c', '\0' };//('\0'结束标志位)定义一个单引号的字符集的数组
//打印字符串
printf("%s\n", arr1);
printf("%s\n", arr2);
}
(1)调试观察字符结束标志位‘\0’:
如图输出结果所示,此时会出现乱码
(2)调试观察字符结束标志位‘\0’:
如图输出结果所示,此时得到想要的结果
代码1.3、求字符串的长度:
//应用strlen()函数,且需要引用头文件<string.h>
//求长度时,字符串的结束标志’\0’,不计入长度
/*例程1.3*/
#include <stdio.h>
#include <string.h> //声明头文件
int main()
{
int length = strlen("abc");
//打印字符串长度
printf("%d\n", length);
}
代码1.4、求数组字符串的长度,应用strlen()与’\0’结束标志位:
//应用strlen()函数,且需要引用头文件<string.h>
//求长度时,字符串的结束标志’\0’,不计入长度
/*例程1.4*/
#include <stdio.h>
#include <string.h> //声明头文件
int main()
{
char arr1[] = "abc";
char arr2[] = { 'a', 'b', 'c', '\0' };//('\0'结束标志位的重要性)
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
return 0;
}
(1)输出观察字符串长度(不满足):
(2)输出观察字符串长度(满足):
2、转义字符
转义字符是C语言中表示字符的一种特殊形式。转义字符以反斜杠’'开头,后面跟一个字符或一个八进制或十六进制数表示。
转义字符具有特定的含义,不同于字符原有的意义,故称转义字符。
说明:(1)转义字符常以\或者\x开头,以\开头表示8进制形式的编码值,以\x开头表示16进制形式的编码值。对于转义字符数值来说,转义字符的初衷是用于 ASCII 编码,所以它的取值范围有限:只能使用八进制或者十六进制。
a、八进制形式的转义字符最多后跟三个数字,也即\ddd,最大取值是\177;(范围:0~7)
b、十六进制形式的转义字符最多后跟两个数字,也即\xdd,最大取值是\x7f。(x小写,范围:0~9,A–F)
如:\175 正确 \187 错误 8进制0~7
如:\xff 正确 \x2k 错误 16进制0~9,A–F
常见转义字符表
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 蜂鸣(BEL) | 007 |
\b | 退格(BS),将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 007 |
\t | 水平制表(HT) | 009 |
\v | 垂直制表(VT) | 011 |
’ | 单引号 | 039 |
" | 双引号 | 034 |
// | 注意:反斜杠 | 092 |
\? | 问号 | 039 |
其中:\n和\t是最常用的两个转义字符:
\n用来换行,让文本从下一行的开头输出,前面的章节中已经多次使用;
\t用来占位,一般相当于四个空格,或者 tab 键的功能。
注意:‘ ??) ’—三字母词—输出转化后为‘ ] ’,所以使用 ? 转义防止出现多个’ ? ‘号时,被转化为三字母词’ ] ’
ASCII 码表
代码2.1、转义三字母词的介绍:
/*例程2.1*/
#include <stdio.h>
int main()
{
printf("(Are you ok??)");//??)---三字母词---输出转化后为]
//输出:(Are you ok]
printf("(Are you ok\?\?)");//使用\?转义防止出现多个'?'号时,被转化为三字母词']'
//输出:(Are you ok??)
}
代码2.2、转义特殊的字符的说明:
注意:单引号、双引号、反斜杠等是特殊的字符,不能直接表示:
(1)单引号是字符类型的开头和结尾,要使用’表示,也即’‘’;
(2)双引号是字符串的开头和结尾,要使用"表示,也即"abc"123";
(3)反斜杠是转义字符的开头,要使用\表示,也即’\',或者"abc\123"。
/*例程2.2*/
#include <stdio.h>
int main()
{
printf("%c\n",'a');//打印一个字符
printf("%c\n", ''');//打印一个单引号字符,此时出错,C语言语法冲突,需要\进行转义
printf("%c\n", '\'');//‘
//同理:双引号
printf("%c\n", '\"');//”
//同理:反斜杠
printf("%c\n", '\\');//\
}
代码2.3、八进制的转义字符:
八进制形式的转义字符最多后跟三个数字,也即\ddd,最大取值是\177;(范围:0~7)
/*例程2.3*/
#include <stdio.h>
int main()
{
printf("%c\n", '\130');//%c单个字符一定记得加单引号'',表示8进制的130,输出为10进制的多少?
//因为%c所以结果为:X //X--ASCII码的值为10进制的88
//同理:A--65--8进制的101
printf("%c\n", '\101');//A
printf("%d\n", '\101');//65
}
代码2.4、十六进制的转义字符:
十六进制形式的转义字符最多后跟两个数字,也即\xdd,最大取值是\x7f。(x小写,范围:0~9,A–F)
/*例程2.4*/
#include <stdio.h>
int main()
{
printf("%c\n",'\x30');//\x30---'0'---48
printf("%d\n", '\x30');
}
代码2.5、包含转义字符的字符串求长度:
//数长度时注意:\t算一个 \328 不可以算一个,因为8进制0~7—‘\32’和8分开计数
/*例程2.5*/
#include <stdio.h>
int main()
{
printf("c:\\test\\328\\test.c\n");//正确输出'\',以表达路经
printf("%d\n",strlen("c:\test\328\test.c"));//答案:14
}
代码2.6、跳过对应的输入:
//%d%*d%d----%*的作用:跳过对应的输入
/*例程2.6*/
#include <stdio.h>
int main()
{
int a, b, c, d;
printf("请输入4个整数:\n");
scanf("%d%d%*d%d", &a, &b, &c, &d);//跳过了对应的第三个输入30
//输入a=10且存储在&a,输入b=20且存储在&b,输入c=30(跳过),输入d=10且存储在&c,最后使得&d无效理解为Null
printf("输出的结果为:%d%d%d\n", a, b, c);
}
代码2.7、使输出保留进制的前缀符号:
//%d%#d----%#的作用:使输出保留进制的前缀符号
//以8进制为例
/*例程2.7*/
#include <stdio.h>
int main()
{
int x = 017;
int y = 017;
printf("x=%o\ny=%#o\n", x,y);//x = 17 y = 017
}
3、注释的作用
注释就是在代码中起补充说明的作用
注意:(1)注释不支持嵌套,不被执行,可在任意合理位置
(2)通常以‘//’表单行注释,‘/**/’表多行注释
(3)使代码风格更规范也便于理解和阅读