首页 > 解决方案 > 使用'a' - 'A' 而不是“32”或空格字符背后的逻辑是什么?

问题描述

这是“ The C Programming Language ”一书中的代码,它将单个字符映射为 ASCII 字符集的小写,如果字符不是大写字母,则返回不变:

int lower(int c)
{
    if (c >= 'A' && c <= 'Z')
        return c + 'a' - 'A';
    else
        return c;
}

我不明白背后的逻辑return c + 'a' - 'A';

为什么他们不简单地' '输入或数字32而不是'a' - 'A'

标签: ctype-conversionascii

解决方案


在 ASCII 字符集中'a' - 'A'恰好有 32 的值。它与 ASCII 空格字符' '也有 32 的值完全无关,所以用 . 替换是没有意义'a' - 'A'' '

using'a' - 'A'比 更有意义和易于理解32,并且也不会将实现与使用特定字符集联系起来(尽管a-zA-Z需要连续才能工作,这并非适用于所有字符集)。


推荐阅读