博客
关于我
第19节 字符数据及字符类型
阅读量:311 次
发布时间:2019-03-03

本文共 2946 字,大约阅读时间需要 9 分钟。

C语言字符常量与转义字符详解

一. 字符常量

字符常量是用单引号括起来的一个字符,例如 'a', '#', '%', 'D'。C语言中的字符常量表示一个ASCII码值,范围为0到255(对于unsigned char)或-128到127(对于signed char)。

二. 字符与数字的转换

可以通过减法和加法将字符常量转换为数字。例如:

int main() {    char c1, c2;    int i = 100;    c1 = 'a'; // 'a' 的ASCII码为97    i = i - c1; // i = 3    printf("c1: %c\n", c1); // 输出 'a'    printf("c1: %d, i: %d\n", c1, i); // 输出97和3    c2 = c1 + 4; // 'a' + 4 = 'e'    printf("c2: %c\n", c2); // 输出 'e'}

运行结果:

c1: ac1: 97, i: 3c2: e

三. ASCII码对照表

ASCII码共有256个值,常见字符的ASCII码值如下:

转义字符 意义 ASCII码值(十进制)
\a 响铃 (BEL) 7
\b 退格 (BS) 8
\f 换页 (FF) 12
\n 换行 (LF) 10
\r 回车 (CR) 13
\t 水平制表 (HT) 9
\v 垂直制表 (VT) 11
\0 空字符 (NULL) 0
\xhh 1-2位十六进制数 两位十六进制
\ddd 1-3位八进制数 三位八进制

四. 字符数据的输入输出

scanf()printf() 函数

scanf()print() 用于读取和输出字符。例如:

int main() {    int x, y, z;    char ch;    scanf_s("%d%c%d", &x, &ch, 2, &y); // 读取三个输入    z = x + y;    printf("%d%c%d=%d\n", y, ch, x, z);}

运行结果:

1+22+1=3

getchar()putchar()

getchar() 读取输入字符,putchar() 写入字符流。例如:

int main() {    char c;    c = getchar(); // 读取大写字母    putchar(c + 32); // 显示小写字母    putchar('\n');}

运行结果:

Aa

五. 获得缓存区中的输入数据

使用 getchar() 读取输入数据时,缓冲区可能包含未显示的字符。例如:

int main() {    char c1, c2;    c1 = getchar(); // 读取第一个字符    c2 = getchar(); // 读取第二个字符    printf("%c %c\n", c1, c2); // 输出两个字符    printf("%d %d\n", c1, c2); // 输出两个字符的ASCII码    return 0;}

输入结果:

输入abc
<回车>
abca b97 98输入a
<回车>
aa97 10
<回车>

六. 以 \ 开头的字符序列——转义字符常量

许多控制字符不能用普通字符表示,必须使用转义字符。常见转义字符及其意义如下:

转义字符 意义 ASCII码值(十进制)
\a 响铃 (BEL) 7
\b 退格 (BS) 8
\f 换页 (FF) 12
\n 换行 (LF) 10
\r 回车 (CR) 13
\t 水平制表 (HT) 9
\v 垂直制表 (VT) 11
\0 空字符 (NULL) 0
\xhh 1-2位十六进制数 两位十六进制
\ddd 1-3位八进制数 三位八进制

七. 转义字符用法示例

1. 格式化输出

int main() {    printf("%.4f%.4f%.4f\n", 1.01, 2.2334, 3.4);    printf("%.4f\t%.4f\t%.4f\n", 1.01, 2.2334, 3.4);}

运行结果:

1.01002.23343.40001.0100  2.2334  3.4000

2. 控制字符示例

int main() {    printf("This\nis\na\n\t\ttest\n\nShe said, \"How are you?\"\n");}

运行结果:

Thisisa                testShe said, "How are you?"

八. ASCII编码与汉字编码的区别

项目 ASCII编码 汉字编码
字符长度 1字节 2字节
编码方式 和西文混用,最高位为0 每字节最高位均为1
字符范围 0-255 0-255

九. 字符串常量及存储

  • 字符串常量用双引号括起来,例如 "abc", "hello", "a+b", "He Lijian"
  • 字符串常量在内存中占用多少字节取决于执行环境(例如,通常为4字节)。
  • 编译系统会自动在字符串末尾添加终止字符 \0
  • 转义字符和空格会被正确处理。
  • 例子

    int main() {    char s[] = "abc\n"; // 占5字节:'a', 'b', 'c', '\n', '\0'    char s[] = "abc\\n"; // 占5字节:'a', 'b', 'c', '\\', 'n', '\0'}

    实践项目

    1. 输入小写字母,输出大写字母和ASCII码

    int main() {    char ch;    printf("输入一个小写字母: ");    scanf_s("%c", &ch, 1);    ch = ch - 32;    printf("与对应的大写字母: %c\n", ch);    printf("大写字母 ASCII码: %d\n", ch);}

    运行结果:

    输入一个小写字母: a与对应的大写字母: A大写字母 ASCII码: 65

    2. 使用 \t 对齐输出项

    int main() {    printf("Name\tAge\tSalary\taddr\n");    printf("Tom\t%d\t%6.1f\t%s\n", 20, 314.2, "NewYork");    printf("Jerry\t%d\t%6.1f\t%s\n", 22, 7876.4, "BingJing");    printf("Blotu\t%d\t%6.1f\t%s\n", 9, 5.5, "ShangHai");    return 0;}

    运行结果:

    Name    Age     Salary  addrTom     20       314.2  NewYorkJerry   22      7876.4  BingJingBlotu   9          5.5  ShangHai

    转载地址:http://cjqm.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现binary tree mirror二叉树镜像算法(附完整源码)
    查看>>
    Objective-C实现binary tree traversal二叉树遍历算法(附完整源码)
    查看>>
    Objective-C实现BinarySearchTreeNode树算法(附完整源码)
    查看>>
    Objective-C实现binarySearch二分查找算法(附完整源码)
    查看>>
    Objective-C实现binomial coefficient二项式系数算法(附完整源码)
    查看>>
    Objective-C实现binomial distribution二项分布算法(附完整源码)
    查看>>
    Objective-C实现bisection二分法算法(附完整源码)
    查看>>
    Objective-C实现bisection二等分算法(附完整源码)
    查看>>
    Objective-C实现BitMap算法(附完整源码)
    查看>>
    Objective-C实现bitmask位掩码算法(附完整源码)
    查看>>
    Objective-C实现bitonic sort双调排序算法(附完整源码)
    查看>>
    Objective-C实现BloomFilter布隆过滤器的算法(附完整源码)
    查看>>
    Objective-C实现BMP图像旋转180度(附完整源码)
    查看>>
    Objective-C实现bogo sort排序算法(附完整源码)
    查看>>
    Objective-C实现boruvka博鲁夫卡算法(附完整源码)
    查看>>
    Objective-C实现Boyer-Moore字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现BP误差逆传播算法(附完整源码)
    查看>>
    Objective-C实现breadth First Search广度优先搜索算法(附完整源码))
    查看>>
    Objective-C实现BreadthFirstSearch广度优先搜索算法(附完整源码)
    查看>>
    Objective-C实现BreadthFirstShortestPath广度优先最短路径算法(附完整源码)
    查看>>