怎么像整数一样计算字符?
周立功教授数年之心血之作《程序设计与数据结构》,电子版已无偿性分享到电子工程师与高校群体,经周立功教授授权,本公众号特对本书内容进行连载,愿共勉之。
第一章为程序设计基础,本文为1.8.1 字符常量。
>>> 1. 字符常量的引用
字符常量是使用一对单引号"''"包围起来的,比如,'O','编译器知道这个符号指的是字母O的ASCII值,即79。同样可以用' '指出空格,或用'9'指出数字9。常量'9'指的是一个字符,不应该与整数值9混淆。除非程序员能记住ASCII码表,否则任何人看到79都不会联想到字母O,而字符常量'O' 则可以直接传递它的意义。
在C语言中,字符能象整数一样计算,不需要特别的转换。基于此,既可以给一个字符加上一个整数,比如,字符c与整数n相加,即c+n表示c后面的第n个字符。也可以从一个字符减去一个整数,比如,表达式c-n表示c前面的第n个字符。还可以从一个字符减去另一个字符,比如,c1和c2都是字符,那么c1-c2表示两个字符的距离。
更进一步地,还可以比较两个字符,如果在ASCII表中,c1在c2前面,那么c1 if( ch >= '0' && ch <= '9' ) { … } 这样一来就将数字字符与ASCII码表中的其它字符区分开了。虽然标准C接口ctype.h提供了相应的函数,但如果你从头到尾实现它们,则有助于进一步深入了解它们的操作。如果ch是大写字母,返回它对应的小写字母,否则返回ch本身,详见程序清单 1.35。 程序清单 1.35 tolower()函数范例程序 1 char tolower(char ch) 2 { 3 if( ch >= 'A' && ch <= 'Z' ){ // 标识大写字母 4 return (ch + ('a' - 'A')); 5 }else{ 6 return (ch); 7 } 8 } >>> 2. 字符的输入输出 虽然转换符%c允许scanf()函数和printf()函数对一个单独的字符进行读写操作。比如: char ch; scanf("%c", &ch); printf("%c", ch); 但在读入字符前,scanf()函数不会跳过空格符,即会将空格作为字符读入变量ch。为了解决这个问题,则必须在%c的前面加一个空格: scanf(" %c", &ch); 虽然scanf()函数不会跳过空格符,却很容易检测到读入的字符是否为换行符'\n'。比如: while(ch != '\n'){ scanf("%c", &ch); } 当然也可以调用getchar()和putchar()读写一个单独的字符,它们是在stdio.h中定义的宏,分别用于从键盘读取数据和将字符打印到屏幕上。虽然宏和函数在技术上存在一些区别,但它们的用法是一样的。比如: int getchar(void); // 输入一个字符 int putchar(int ch); // 输出一个字符 getchar()函数不带任何参数,它从输入队列中返回一个字符。比如,下面的语句读取一个字符输入,并将该字符的值赋给变量ch: ch = getchar(); 该语句与下面的语句等效: scanf("%c", &ch); putchar()函数打印它的参数,比如,下面的语句将之前赋给ch的值作为字符打印出来: putchar(ch);
数据结构 相关文章:
- 周立功“程序设计与数据结构”:深度解剖动态分布内存的free()函数与realloc()函数(07-25)
- 周立功手把手教你学嵌入式编程:函数指针与指针函数的应用(07-29)
- 周立功《程序设计与数据结构》:字符串函数(08-05)
- 嵌入式如何进一步成长,该学习哪些书呢?(08-13)
- 不完全类型和抽象数据类型的定义(08-14)
- 算法与数据结构——接口(08-19)