有一行电文,按规律译成密码:第1个字母变成26个字母,第1个字母变成第(26-i+1)个字母,非字母不变

#include<stdio.h>
#include<ctype.h>
void miwen(const char*str)
{
    const char *lowalpha="zyxwvutsrqponmlkjihgfedcba";
     const char *upper="ZYXWVUTSRQPONMLKJIHGFEDCBA";
     char crr[100];
     int i=0;
    while(*str!='\0')
    {
        if(isupper(*str))
        {
            crr[i++]=upper[*str-'A'];
        }
        else if(islower(*str))
        {
            crr[i++]=lowalpha[*str-'a'];
        }
        else {crr[i++]=*str;}
        *str++;

    }
    crr[i]='\0';

    printf("%s\n",crr);

};
int main()
{ char *str="abc;;;def;;xyz";
    char *str2=*str;

 miwen(str);
 return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 这个问题的意思是:输入一个电文,已按下面规律译成密码:a->za->z b->yb->y c->xc->x 即第1个字母变成26字母,第2个字母变成第25个字母,第i个字母变成第(26-i+1)个字母字母字符不变。要求编程程序将密码译回原文,并输出原文。 回答: ### 回答2: 这道题的意思是将一个字符串中的每个字母按照规律进行加密,即将第1个字母变成26个,将第2个字母变成第25个,以此类推,最后输出加密后的字符串。我们需要将这个字符串逆序,再按照规律进行解密,最后再将它逆序回来,就可以得到原文。 具体步骤如下: 1. 输入一个加密后的字符串,将它逆序。 2. 对于每一个字符,我们需要先计算出它原来的字母是哪个,再按照规律计算出加密前的字母。 3. 将计算出的字母添加到一个新的字符串中,直到处理完所有的字符。 4. 将新字符串逆序,输出即可。 下面是Python的实现代码: ``` s = input() # 输入加密后的字符串 n = len(s) s = s[::-1] # 将字符串逆序 ans = '' # 用来存储解密后的字符串 for i in range(n): ch = s[i] if ch.isalpha(): # 如果是字母 old_index = 26 - ord(ch.lower()) + ord('a') # 计算出原来的字母的位置 old_ch = chr(old_index) # 计算出原来的字母 if ch.isupper(): # 如果原来的字母是大写,就将解密后的字母也转成大写 old_ch = old_ch.upper() ans += old_ch else: # 如果不是字母,就直接添加到答案中 ans += ch ans = ans[::-1] # 将答案逆序 print(ans) ``` 这个程序的时间复杂度是O(n),其中n是字符串的长度。 ### 回答3: 本题的解答思路是先将密文中的字符根据代码规则转换为明文中对应的字符,然后输出转换后的明文。具体实现可以通过读入一行字符串,然后使用循环遍历字符串中的每个字符,判断是否为字母字符,如果是则按照代码规则进行转换,否则不做处理。 具体代码如下: ```python cipher = input("请输入密文:") plain = "" for c in cipher: if c.isalpha(): # 如果是字母,则按照代码规则进行转换 n = ord(c) - ord('a') plain += chr(ord('a') + 25 - n) else: # 字母字符直接添加到明文字符串中 plain += c print("明文为:", plain) ``` 以上代码中,使用了Python中内置的`isalpha()`函数来判断当前字符是否为字母,`ord()`函数可以将字符转换为对应的Unicode编码,`chr()`函数可以将Unicode编码转换为对应的字符。在转换过程中,需要注意字符大小写的问题,这里假设输入的密文都是小写字母。如果输入的密文包含大写字母,需要对代码进行相应的修改。 另外,需要注意输入的密文中可能包含空格、标点等字母字符,这些字符在转换过程中不应该进行处理,直接添加到明文字符串中即可。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值