发现好多题解都是授之鱼而不授之渔,属于应题代码,所以想写一个通用代码分享给大家
解题思路:
首先我们要知道一个叫做ASCII码表的东西,C语言的字符都是用ASCII码编写的
如果我们写一行这样的代码:
printf("%d\n", 'A');
将大写的 'A' 作为整形输出,会发现输出的结果是65,如果把 'A' 换成 'Z', 输出结果就会变成90
没错,其实每一个字符都是用一个数字来表示的,而且字符的排布是有序的,我们可以用字符来做比较甚至做运算
我们知道 'A' ==65, 'Z' ==90,那么我们想判断一个字符 ch 是否为大写字母的话,就可以这样写
if (ch >= 65 && ch <= 90)
或者不用数字,直接用字符做比较:
if (ch >= 'A' && ch <= 'Z')
同样的,判断小写字母就可以这样写:
if (ch >= 'a' && ch <= 'z')
判断语句写好了,接下来只需要将字母向后移动4位,但如果移动后的字符超过了字母 'Z' 或 'z' 该怎么办呢?
不必再使用分支,我们只需要将字符加4之后减去 'A' ( 或者 'a' ),然后对26取余,再加上 'A' ( 或者 'a' )
不太懂的话应该是这里没解释清楚:
字符加 4 就是后移的操作,减去 'A' 可以求出后移之后与 'A' 的距离
大写字母与 'A' 的距离应该为 0 ~ 25 ,但最后四个字母后移会超出这个范围
比如 'W' 后移 4 再减 'A' 变成了 26,超出了范围最大的 25,所以对 26 取余,就成了 0
0 就是 'W' 后移 4 之后与 'A' 真正的距离
此时拿这个距离再加上 'A' 就是后移之后真正的结果了,即 'A' ( 'W' 后移 4 位为 'A' )
小写字母同理
详细内容请看代码:
#include <stdio.h> int main() { char s[11]; //定义一个长度为10的字符串(注意有结尾符) gets(s); //输入字符串 for (int i = 0; s[i] != '\0'; i++) //循环到结尾符'\0'时停止循环 { if (s[i] >= 'A' && s[i] <= 'Z') //判断是否为大写字母 { s[i] = (s[i] + 4 - 'A') % 26 + 'A'; //大写字母后移 } if (s[i] >= 'a' && s[i] <= 'z') //判断是否为小写字母A { s[i] = (s[i] + 4 - 'a') % 26 + 'a'; //小写字母后移 } } puts(s); //输出字符串 return 0; }
0.0分
659 人评分
#include<stdio.h> int main() { char a,b,c,d,e; scanf("%c%c%c%c%c",&a,&b,&c,&d,&e); if(a<='z' && a>='a') a=(a+4-'a')%26+'a'; if(a<='Z' && a>='A') a=(a+4-'A')%26+'A'; if(b<='z' && a>='a') b=(b+4-'a')%26+'a'; if(b<='Z' && a>='A') b=(b+4-'A')%26+'A'; if(c<='z' && a>='a') c=(c+4-'a')%26+'a'; if(c<='Z' && a>='A') c=(c+4-'A')%26+'A'; if(d<='z' && a>='a') d=(d+4-'a')%26+'a'; if(d<='Z' && a>='A') d=(d+4-'A')%26+'A'; if(e<='z' && a>='a') e=(e+4-'a')%26+'a'; if(e<='Z' && a>='A') e=(e+4-'A')%26+'A'; printf("%c%c%c%c%c",a,b,c,d,e); return 0;} 哪里错了?
#include<stdio.h> int main() { char a,b,c,d,e; scanf("%c%c%c%c%c",&a,&b,&c,&d,&e); if(a<='z' && a>='a') (a+4-'a')%26+'a'; if(a<='Z' && a>='A') (a+4-'A')%26+'A'; if(b<='z' && a>='a') (b+4-'a')%26+'a'; if(b<='Z' && a>='A') (b+4-'A')%26+'A'; if(c<='z' && a>='a') (c+4-'a')%26+'a'; if(c<='Z' && a>='A') (c+4-'A')%26+'A'; if(d<='z' && a>='a') (d+4-'a')%26+'a'; if(d<='Z' && a>='A') (d+4-'A')%26+'A'; if(e<='z' && a>='a') (e+4-'a')%26+'a'; if(e<='Z' && a>='A') (e+4-'A')%26+'A'; printf("%c%c%c%c%c",a,b,c,d,e); return 0; } 请问大佬我哪里错了
char c1='C',c2='h',c3='i',c4='n',c5='a'; c1 = c1+4; c2 = c2+4; c3 = c3+4; c4 = c4+4; c5 = c5+4; printf("%c,%c,%c,%c,%c\n",c1,c2,c3,c4,c5); 我这个也ok啊就是不知道对不对
fanyc 2021-10-23 22:52:31 |
把打印输出函数格式控制字符之间的逗号去掉,也算对!
我还是觉得这个好点 #include"stdio.h" int main() { char ch1,ch2,ch3,ch4,ch5; scanf("%c",&ch1); scanf("%c",&ch2); scanf("%c",&ch3); scanf("%c",&ch4); scanf("%c",&ch5); printf("%c%c%c%c%c",ch1+4,ch2+4,ch3+4,ch4+4,ch5+4); return 0; }
#include <stdio.h> int main() { scanf("China"); printf("Glmre"); return 0; } 这样能算我过就离谱XD
崔泽同 2021-09-21 13:51:47 |
绝了
科 2021-09-24 15:10:48 |
np
小白虫 2021-09-26 22:43:45 |
服了
有猿相见 2021-09-29 11:20:21 |
jjz
竹林听风丶 2021-10-07 19:29:29 |
乐了
仙胖 2021-10-09 00:20:16 |
是真的牛只能说牛逼
沧三 2021-10-16 17:41:30 |
以一人之力刷新c语言的界面
随缘 2021-10-26 19:05:10 |
强
青年大学习 2021-11-14 22:43:51 |
yyds
清水啊 2022-02-25 18:02:23 |
秀啊
#include<stdio.h> int main() { char c1=getchar(),c2=getchar(),c3=getchar(),c4=getchar(),c5=getchar(); c1=c1+4; c2=c2+4; c3=c3+4; c4=c4+4; c5=c5+4; printf("%c%c%c%c%c",c1,c2,c3,c4,c5); return 0; } 这个感觉可以的
劉大哥 2021-10-16 21:10:46 |
那后面几个字母怎么办
#include <stdio.h> #include <stdbool.h> int main (void) { int fuck = true; for(fuck) printf("fuck your mom and \sisters.\n"); return 0; }
084621122 2021-10-17 09:40:50 |
选择用错了,少大括号
084621122 2021-10-17 09:49:54 |
好像不是少大括号,草
Ediosn 2021-10-17 11:56:54 |
@uq_63473726710 谢谢你,我的第2排的变量全是a,所以错了