习题7-7 字符串替换

本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:

原字母对应字母
A Z
B Y
C X
D W
X C
Y B
Z A

输入格式:

输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:

输出在一行中给出替换完成后的字符串。

输入样例:

Only the 11 CAPItaL LeTtERS are replaced.
 

输出样例:

Lnly the 11 XZKRtaO OeGtVIH are replaced.

代码如下:
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<math.h>
 4 #include<string.h>
 5 int main() {
 6     char a[81];
 7     char b[81];
 8     gets(a);
 9     //int n = strlen(a);
10     for (int i = 0; i < 81; i++) {
11         if (a[i] >= 65 && a[i] <= 90) {
12             b[i] = 155 - a[i];
13         }
14         else {
15             b[i] = a[i];
16         }
17     }
18     
19     printf("%s", b);
20     
21     return 0;
22 }

这个题目思路还是蛮简单的,就是把这个式子算出来,如果同学们不知道咋算,我这里有一个笨办法,就是A是65,Z是90,它俩对应,那么输入B(ASCII码对应的是66)时,应该输出89,我们可以像找规律一样,找这几个数字之间的规律,我们发现,65+90 ==  66+89 == ......== ,他们的和是150,所以就是代码第12行的那样子。

我刚开始做的时候,没有用到gets(),我比较习惯用scanf(),结果发现怎么做都不好做,数据判定总有问题,我就查了查资料,用了这个gets()。

为什么数组要用到81呢,因为还要留一位存放数组的最后一位,防止数据溢出导致报错或者数据丢失,我在pta就是因为80,而判断出错。

接下来写以下刚刚查的资料

单个字符输入的方式有:scanf(%c),getchar(),getcha(),getch()

字符串输入方式有:scanf(%s),gets()

具体说说区别,

getchar就是一个简洁,剩下和scanf没有区别了

getcha没有缓冲区,输入一个字符就会立刻读出,不用等待用户回车或者其他操作。 需要头文件conio.h,(因为Linux和MAC os没有这个头文件,所以只支持Windows)

getch 和getcha一样没有缓冲区,它的特别之处是,它没有回显,(看不到用户输入的字符),在特定场合是非常有用的。  需要头文件conio.h  

scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。

gets() 认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。

也就是说,gets() 能读取含有空格的字符串,而 scanf() 不能。

原文地址:https://www.cnblogs.com/KeithTee/p/13831336.html