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