c语言问题,求具体方法思路

汤姆的密码一次可以写两个字母。给定一些密文(用汤姆的密码加密的文本),取其前两个字母。明文(未加密文本)的第一个字母是这两个加密字母的ascii值较小的字母。例如,密文的前两个字母为“GD”,则明文的第一个字母为“D”。为了解释这段代码,下图演示了代码“CZuOMUPP1i5fg112”是如何被解密为“COMP1511”的。在每一对字母中,ascii值较低的那一个就是明文的一部分。
您不应该假定会有偶数个输入。如果字符个数为奇数,则忽略最后一个字符。您可以被指定任何可打印的ascii字符作为输入(小写字母、大写字母、换行符、符号等)。您的程序应该总是在输出的最后打印一个换行符。
这个练习很难用fgets来解决。您应该使用getchar解决这个问题。

img

img

img


#include <stdio.h>
#include <string>
 
int main()
{
  
 
 
   char arrs[100];
    char res[100];

int count = 0;
scanf("%s",arrs);
for(int i=0;i<(strlen(arrs)%2==0?strlen(arrs):strlen(arrs)-1);i+=2)
{
     char a;
    if(arrs[i]<arrs[i+1])
    {
        a =arrs[i];
    }
    else{
       a =arrs[i+1];
    }
    res[count]=a;
    count++;
    res[count]=0;
}
printf("%s",res);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
void main()
{
    char a[1000] = {0};
    int count = 0;
    printf("请输入加密串:");
    char c;
    while((c = getchar()) != EOF)
    {
      a[count++] = c;
    //  putchar(c);
    }
    char *p = a;
    while(*p != 0 && *(p+1)  != 0)
    {
        if(*p <= *(p+1))
            printf("%c",*p);
        else
            printf("%c",*(p+1));
        p+=2;
    }
    printf("\n");
}