一、C语言把字符当做什么进行处理? 二、事实上在C中字符常量是什么类型? 三、如果把含有小写字母的变量转化成大写字母? 四、字符拥有和数相同的属性,能带来什么好处? 五、程序使用比较符号进行字符比较不易移植是什么? |
在C语言中字符的操作很简单,C语言把字符当作小整数进行处理。毕竟所有字符都是以二进制的形式进行编码的,而且无需花费太多的想象就可以将这些二进制代码看成整体。例如,在ASCII码中,字符的取值范围是0000000~1111111,可以看成时候0~127的整数。字符‘a’的值为97,‘A’的值为65,‘0’的值为48,而‘ ’的值为32。在C中,字符和整数之间的关联是非常强的,字符常量事实上是int类型而不是char类型。 当计算中出现字符时,C语言只是使用它对应的整数值。思考下面的例子,假设采用ASCII字符集: char ch; int i; i = ‘a’; /*i is now 97 */ ch = 65; /*ch is now ‘A‘ */ ch = ch + 1; /*ch is now ‘B‘ */ ch++; /*ch is now ‘C‘ */ 可以像比较数那样对字符进行比较。 下面的if语句测试ch中是否含有小写字母,如果有那么它会把ch转化为相应的大写字母。 if(‘a‘ <= ch && ch <= ‘z‘) ch = ch - ‘a‘ + ‘A‘; 诸如‘a‘ <= ch这样的比较使用的是字符所对应的整数值,这些数值依据使用的字符集有所不同,所以程序使用>、<=、>、>=来进行字符比较可能不易移植。 字符拥有和数相同的属性,这一事实会带来一些好处。例如可以让for语句中的控制变量遍历所有的大写字母: for(ch = ‘A’; ch <= ‘Z‘; ch++)... 另一方面,以数的方式处理字符可能会导致编译器无法检查出来的多种编程错误,还可能会导致我们编写出如‘a‘ * ‘b‘ / ‘c‘这样无意义的表达式。 此外,这样做也可能会妨碍程序的可移植性,因为程序可能会基于一些对字符集的假设。(例如,上述for循环假设从字母a到字母Z的代码都是连续的。)
|
原文:https://www.cnblogs.com/cjbsai/p/14644675.html