习题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() 不能。