咯咯哒1 发表于 2020-10-25 12:50:28

c语言13课课后作业中一个不理解的地方

1. 写一个程序,将用户输入的英文句子中的字母大小写进行调换(即大写字母转换为小写字母,小写字母转换为大写字母)。J
#include <stdio.h>

int main()
{
      int ch;

      printf("请输入一行英文句子:");

      while ((ch = getchar()) != '\n')
      {
                if (ch >= 'A' && ch <= 'Z')
                {
                        ch = ch - 'A' + 'a';
                }
                else if (ch >= 'a' && ch <= 'z')
                {
                        ch = ch - 'a' + 'A';
                }

                putchar(ch);
      }

      putchar('\n');

      return 0;
}

ch = ch - 'A' + 'a';ch = ch - 'a' + 'A';这两行代码不是显示只可以Aa互换吗?为什么这个代码时刻实现全部字母大小写的转换呢?

昨非 发表于 2020-10-25 12:55:31

大小写字母在ASCII码表上都是顺序排的
ch = ch - 'A' 得到字母在大写字母中的排名 (比如ch为B,ch-“A”=1)
再加上“a”,就得到在小写字母表中排名相同的小写字母(1+‘a’=‘b’)

jitianmoshen 发表于 2020-10-25 12:56:21

ASCⅡ表里所有大写字母的编码都比对应小写字母的编码小32, 你说的ch = ch - 'A' + 'a';ch = ch - 'a' + 'A'这两句可以改成 ch = ch + 32; ch = ch - 32;

昨非 发表于 2020-10-25 12:59:09

对照这个表
https://blog.csdn.net/weixin_39805338/article/details/80810500?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160355227719724813244889%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160355227719724813244889&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-80810500.pc_first_rank_v2_rank_v28&utm_term=ascii%E7%A0%81%E5%AF%B9%E7%85%A7%E8%A1%A8&spm=1018.2118.3001.4187

找几个例子自己算一算就明白了
页: [1]
查看完整版本: c语言13课课后作业中一个不理解的地方