C语言或C++程序编写

求个程序
在密码学中,密文可以看作是使用加密密钥的明文(纯消息)的加密结果。 Vigenere 密码的工作原理如下:1.选择一个字符串(明文消息)作为输入,例如,我们选择" tellhimaboutme ”作为明文。
2.选择一个简短的秘密单词(另一个字符串)作为关键字,例如,在本例中,我们选择" cafe ”作为关键字。3.如果所选的关键字短于明文,则重复此操作,直到长度匹配为止。例如,在步骤1和步骤2中分别使用输入和密钥,重复的密钥应该是" c…a"。4.然后,根据步骤3中输出的密钥中相应字符的字母表号对明文的每个字符进行移位。(例如,字母" a "是1," e "是5,等等),因此,加密执行如下表所示。例如,明文中第一个字符“ t ”的字母表号是20,键"℃"中对应字符的字母表号是3。因为23(20+3)表示字符" w ”," t ”将被加密为" w "。
明文: telhimaboutme
密码: c…a
密文: wfrakjsfepaypf
现要求如下:
(1)按题意要求,写一个程序把输入的明文转换成密文。我们假设输入是正确的,它是一个 char 类型的字符串,字符串的长度<=100。此外,输入不包括空白字符,您的解决方案中使用的键是“ sylu ”。输入输出格式同上。
(2)再写一个程序把输入的密文转换成明文。我们假设输入是正确的,它是一个 char 类型的字符串,字符串的长度<=100。此外,输入不包括空白字符,您的解决方案中使用的键是" sylu ”。我们假设输入密文的长度比" sylu "键的长度长。这意味着键可以重复,直到长度匹配
输入格式:密文: pdnzehqqxhztht
输出格式◇明文: webelieveinyou

提前谢过

我用的是C++
1是加密,2是解密。

img

#include <cstdio>
#include <cstring>
using namespace std;

char Rstring[10000];
char Key[10000];
char Estring[10000];
int mode;

int main()
{
    while(1)
    {
        printf("Use 1 to encode it and Use 2 to unencode it\n");
        scanf("%d", &mode);
        if(mode == 2)
        {
            scanf("%s", Rstring);
            scanf("%s", Key);
            int slen = strlen(Rstring);
            int klen = strlen(Key);
            for(int i=0;i<slen;++i)
            {
                Estring[i] = Rstring[i] - Key[i%klen] + 'a' - 1;
                while(Estring[i] < 'a') Estring[i] += 26;
                while(Estring[i] > 'z') Estring[i] -= 26;
                printf("%c",Estring[i]);
            }    
        }
        else if(mode == 1)
        {
            scanf("%s", Rstring);
            scanf("%s", Key);
            int slen = strlen(Rstring);
            int klen = strlen(Key);
            for(int i=0;i<slen;++i)
            {
                Estring[i] = Rstring[i] + Key[i%klen] - 'a' + 1;
                while(Estring[i] < 'a') Estring[i] += 26;
                while(Estring[i] > 'z') Estring[i] -= 26;
                printf("%c",Estring[i]);
            }    
        }
        printf("\n");
    }
}

请问可以吗

#include<stdio.h>
#include<string.h>
char equcode[100];
void tocode(char t[],char code[],char coded[])
{
    
    gets(t);
    gets(code);
    int len1=strlen(t),len2=strlen(code);
    int p=len2;
    strcpy(equcode,code);
    int i=0,j;
    while(p<len1)
    {
        equcode[p++]=code[i++];
        if(i==len2) i-=i;
    }
    equcode[p]='\0';

    for(i=0; i<len1; i++)
    {
        coded[i]=(equcode[i]+t[i]-'a'+1);
        if(coded[i]>'z')
            coded[i]-=26;
    }
    coded[i]='\0';
    puts(equcode);
}
void uncode(char t[],char code[],char coded[])
{
    int i;
    int len1=strlen(t),len2=strlen(code);
    for(i=0; i<len1; i++)
    {
        t[i]=(coded[i]-equcode[i]+'a'-1);
       // printf("%d ",t[i]);
        if(t[i]>'z')
            t[i]-=26;
    }
    t[i]='\0';
}

int main()
{
    char t[100],code[100],coded[100];
    tocode(t,code,coded);
    printf("\n");
    puts(coded);
    printf("\n");
    gets(coded);
    uncode(t,code,coded);
    puts(t);
    // printf("%c",'t'+'c'-'a');
    // printf("\n%d %d %d",'t','c','a');
    return 0;
}