有一篇加密后的文章,由三行组成。
第一行是以空格分割的两个字符串;
第二、三行是由 大小写字母、数字、空格以及其它字符 构成的文章,称为密文正文。
请编写程序,使该程序能根据输入输出符合输出要求的内容。
请仔细阅读输出要求。
输入
符合要求的文章,可参见样例。
输出
Ⅰ.第一行:分别统计该文章中三行总共的英文大写字母、小写字母、数字、空格以及其它字符的个数。并按顺序输出,输出的数字之间以空格分割。
Ⅱ.第二行:将第一行的两个字符串进行比较(注:此比较规则不同于strcmp函数),输出比较后的值,称此值为keykey。
比较规则:现有两个字符串s1和s2进行比较
①若s1>s2,输出一个正数;若s1=s2,输出0;若s1<s2,输出一个负数。
②输出的正数或者负数的绝对值应是相比较的两个字符串相应字符的ASCII码的差值之和。
例如“AA”与“CC”相比,由于“A” < “C”,应该输出负数,因“A”与“C”的ASCII码差值为2,故应输出"-2−2"。
当"AAAA"与"CCCC"相比时,应输出 -2 与 -2 的和即"-4−4"。
同理:“AndAnd”和“AidAid”比较,根据第二个字符比较的结果,"n"比"i"大5,因此输出"55"。
当"AndAnd"和"CidCid"相比较时,应输出 -2 与 5 的和即"33".
③当两个字符串不等长时,按短的计算,即如"AndABCDEFAndABCDEF"与"CidCid"相比较时,结果仍然为"33"。
Ⅲ.第三、四行:将密文正文进行解密,按行输出解密后的文章。
解密规则:
①将密文正文的除英文大写字母和空格以外的字符删除。
②将密文正文的所有英文大写字母按字母表顺序向后移动keykey个位置。
例如:若key=2key=2,则字符AZAZ应该解密为CBCB ; 若key=-2key=−2,则字符AZAZ应该解密为YXYX
样例
输入复制
7cVvbj12TWl%HwL YJwK77YULEg^i2QwbnCb2HD
42fb5qg^cJm M^rfgPlv5Wvs^*Fpcib^gsm%4lfrn
O5Vkwxm?rBr?zjgcba90uhybonyxB3fs6ab7d
输出复制
25 62 18 2 10
25
I LOVE
NUAA
输入复制
AAAAA ZZZZZ
X F T A
XFTA
输出复制
18 0 0 4 0
-125
C K Y F
CKYF
题目如上,C语言解题,有大佬看看吗
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void calcu_count(char *s ,int *upper,int *lower,int *number,int *blank,int *other)
{
for(int i=0;i<strlen(s);++i)
{
if(isupper(s[i]))
++(*upper);
else if(islower(s[i]))
++(*lower);
else if(isdigit(s[i]))
++(*number);
else if(isblank(s[i]))
++(*blank);
else
++(*other);
}
}
int calcu_key(char *str1 , char *str2)
{
int len = strlen(str1)>strlen(str2)?strlen(str2):strlen(str1);
int key=0;
for(int i=0;i<len;++i)
key+=str1[i]-str2[i];
return key;
}
void print_text(char *s ,int key)
{
for(int i=0;i<strlen(s);++i)
{
if(isupper(s[i])){
while(key<0) key+=26;
if((s[i]+key) > 'Z')
printf("%c",'A'+((s[i]+key)-'Z')-1);
else
printf("%c",(s[i]+key));
}else if(isblank(s[i])){
printf(" ");
}else ;
}
}
int main()
{
char line1_1[100];
char line1_2[100];
char line2[200];
char line3[200];
int upper=0,lower=0,number=0,blank=1,other=0,key=0;
scanf("%s %s",line1_1,line1_2);
getchar();
gets(line2);
gets(line3);
calcu_count(line1_1,&upper,&lower,&number,&blank,&other);
calcu_count(line1_2,&upper,&lower,&number,&blank,&other);
calcu_count(line2,&upper,&lower,&number,&blank,&other);
calcu_count(line3,&upper,&lower,&number,&blank,&other);
printf("%d %d %d %d %d\n",upper,lower,number,blank,other);
key = calcu_key(line1_1 , line1_2);
printf("%d\n",key);
print_text(line2 ,key);
printf("\n");
print_text(line3 ,key);
return 0;
}
有用帮忙采纳一下