C# 如何从字符串中恢复已删除的空格

C# 如何从字符串中恢复已删除的空格,c#,winforms,encryption,caesar-cipher,C#,Winforms,Encryption,Caesar Cipher,我有一个windows窗体应用程序,可以对字符串进行加密和解密 它使用凯撒算法返回。加密字符串时,我必须删除其中的空格,但当我再次解密字符串时,我应该将删除的空格放回它们的实际位置 在本例中,我面临的问题是从加密字符串中移除空格,并且在解密时,有些字母会被更改为特殊字符,如加密密钥为3的模式: 纯文本:我的名字是Shafaq Zahir 加密文本:pbqdphlvkdidtcdklu 解密文本:M_nameisShafaq@ahir 这是我的密码 class CaesarAlgorithm

我有一个windows窗体应用程序,可以对字符串进行加密和解密 它使用凯撒算法返回。加密字符串时,我必须删除其中的空格,但当我再次解密字符串时,我应该将删除的空格放回它们的实际位置

在本例中,我面临的问题是从加密字符串中移除空格,并且在解密时,有些字母会被更改为特殊字符,如加密密钥为3的模式:

纯文本:我的名字是Shafaq Zahir
加密文本:pbqdphlvkdidtcdklu
解密文本:M_nameisShafaq@ahir

这是我的密码

class CaesarAlgorithm
    {
        public string Encrypt(string pt,int key)
        {
            char[] buffer = pt.Replace(" ",string.Empty).ToCharArray();
            //char[] buffer = pt.ToCharArray();
            for(int i=0;i<buffer.Length;i++)
            {
                if (buffer[i] >= 'a' && buffer[i] <= 'z')
                {
                    buffer[i] = (char)(buffer[i] + key);
                    if (buffer[i] > 'z')
                    {
                        buffer[i] = (char)(buffer[i] - 26);
                    }
                }
                else if (buffer[i] >= 'A' && buffer[i] <= 'Z')
                {
                    buffer[i] = (char)(buffer[i] + key);
                    if (buffer[i] > 'Z')
                    {
                        buffer[i] = (char)(buffer[i] - 26);
                    }
                }
            }

            return new string (buffer);

        }

        public string Decrypt(string pt,int key)
        {
            char[] buffer = pt.ToCharArray();
            for (int i = 0; i < buffer.Length; i++)
            {
                if (buffer[i] >= 'a' && buffer[i] <= 'z')
                {
                    buffer[i] = (char)(buffer[i] - key);
                    if (buffer[i] > 'z')
                    {
                        buffer[i] = (char)(buffer[i] - 26);
                    }
                }
                else if (buffer[i] >= 'A' && buffer[i] <= 'Z')
                {
                    buffer[i] = (char)(buffer[i] - key);
                    if (buffer[i] > 'Z')
                    {
                        buffer[i] = (char)(buffer[i] - 26);
                    }
                }
            }

            return new string(buffer);
        }
    }
}
class算法
{
公共字符串加密(字符串pt,整数密钥)
{
char[]buffer=pt.Replace(“,string.Empty).ToCharArray();
//char[]buffer=pt.ToCharArray();
for(int i=0;i='a'&&buffer[i]'z')
{
缓冲区[i]=(字符)(缓冲区[i]-26);
}
}
else if(buffer[i]>='A'&&buffer[i]'Z')
{
缓冲区[i]=(字符)(缓冲区[i]-26);
}
}
}
返回新字符串(缓冲区);
}
公共字符串解密(字符串pt,整型密钥)
{
char[]buffer=pt.ToCharArray();
for(int i=0;i='a'&&buffer[i]'z')
{
缓冲区[i]=(字符)(缓冲区[i]-26);
}
}
else if(buffer[i]>='A'&&buffer[i]'Z')
{
缓冲区[i]=(字符)(缓冲区[i]-26);
}
}
}
返回新字符串(缓冲区);
}
}
}

我唯一能想到的正确方法是循环遍历原始的char数组,保存每个空格的索引,然后将其添加回末尾,这有点像刚刚醒来,所以可能有更好的解决方案。还想知道为什么不能有空格,这段代码不应该吗

if (buffer[i] > 'Z')
 { 
buffer[i] = (char)(buffer[i] - 26);
 }


if(buffer[i]我认为您的函数最好被称为“obfuscatedanddestruct”和“PartiallyReconstructWithFaults”,因为这就是他们所做的。永远不要试图自己发明“加密”,总是找到一个做得很好而又不会犯初学者错误的库。这是教授在作业中建议的问题是OP自己的“加密”和“解密”函数。保存任意字符的索引毫无帮助。这些索引将存储在哪里?Id将空间更改为使用较少的选项的特定字符,然后很容易将其放置back@MohammedShfq凯撒的算法是一个简单的换位算法。你的代码做了很多事情比转置字符更重要的是,在你的密码文本中保留空格不变,解密时再次忽略它们。你如何处理其他非字母,如标点符号?是的,先生,这是我犯的错误,你让我错了,不是吗?谢谢你,如果你能为我提出一个解决方案,将删除的空格带回来,我将不胜感激
if (buffer[i] <'A')
 { 
buffer[i] = (char)(buffer[i] + 26);
 }