输入的多个字符串解密

有一篇加密后的文章,由三行组成。

第一行是以空格分割的两个字符串;

第二、三行是由 大小写字母、数字、空格以及其它字符 构成的文章,称为密文正文。

请编写程序,使该程序能根据输入输出符合输出要求的内容。

请仔细阅读输出要求。

输入
符合要求的文章,可参见样例。

输出
Ⅰ.第一行:分别统计该文章中三行总共的英文大写字母、小写字母、数字、空格以及其它字符的个数。并按顺序输出,输出的数字之间以空格分割。

Ⅱ.第二行:将第一行的两个字符串进行比较(注:此比较规则不同于strcmp函数),输出比较后的值,称此值为keykey。

 比较规则:现有两个字符串s1s2进行比较

         ①若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"相比较时,应输出 -25 的和即"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;
}

有用帮忙采纳一下