acm oj上一道c语言练习……死活AC不了一直wrong answer求帮助……

被破译的明码加密电码第二次世界大战时日本使用一种明码加密电码在一般部队间进行信息联络。这种明码加密电码只使用26个字母和10个数字。日本人没有想到,这种明码加密电码使用不... 被破译的明码加密电码
第二次世界大战时日本使用一种明码加密电码在一般部队间进行信息联络。这种明码加密电码只使用26个字母和10个数字。日本人没有想到,这种明码加密电码使用不久便被中国人破译了,成为最终导致日本战败的一个技术因素。这种明码加密电码采用了对称算法将原始字母、数字变换为相应的密码,具体方法是将26个字母按照字母序分为前后两组(各含13个字母),将原发字母转换为同组内对称位置的另一个字母,10个数字也按照0-9、1-8的对称方法转换为对应的数字。当年只能靠人工破译,现在请尝试使用C语言编写一个程序实现将原发字母、数字转换为加密的实发字母、数字的功能。

输入:
只有一行可以输入最多不超过20个字母或数字组成的原发数据。如果其中含有除字母、数字以外的其他字符都应予滤除。
输出:
转换后的加密字母、数字串。

输入样例:
Ready04
输出样例:
Vimjo95
展开
 我来答
兔子和小强
2013-05-17 · TA获得超过6945个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1381万
展开全部

你是否忘记进行行接受(不能直接scanf),或者忘记去除非字母和数字字符。

#include <stdio.h>
#include <ctype.h>
int main()
{
    char s[256], *p, *q;
    gets(s);
    for(p=q=s; *p; ++p)
    {
        if(isalpha(*p) || isdigit(*p))
            *q++ = *p;
    }
    *q = '\0';
    for(p=s; *p; ++p)
    {
        if(isupper(*p))
            *p = (*p<='M')*('A'+'M'-*p) + (*p>'M')*('Z'+'N'-*p);
        else if(islower(*p))
            *p = (*p<='m')*('a'+'m'-*p) + (*p>'m')*('z'+'n'-*p);
        else
            *p = '9'+'0'-*p;
    }
    puts(s);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式