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

How to bring back removed spaces from a string

我有 windows 表单应用程序加密字符串和解密 它使用凯撒算法返回。加密字符串时,我必须从中删除空格,但是当我再次解密它时,我应该将删除的空格带回它们的实际位置。

我在这种情况下遇到的问题是从加密字符串中删除空格,并且在解密时有些字母被更改为特殊字符,例如加密密钥为 3 的模式:

纯文本:我的名字是 Shafaq Zahir
加密文本:PbqdphlvVkdidtCdklu
解密文本: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);
        }
    }
}

我唯一能想到的正确方法是遍历原始 char 数组并保存每个 space 的索引,然后将其添加到末尾,有点刚醒来所以可能有更好的解决方案.也只是想知道为什么你不能有 spaces

这个代码不应该

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

if (buffer[i] <'A')
 { 
buffer[i] = (char)(buffer[i] + 26);
 }

在你的解密函数中? 检查它是否小于 A 或 a,因为您要从中减去 key。 也不要替换代码中的空格。只需对它们进行加密和解密,它们就会保留下来,也就是说,除非您保留索引信息,否则无法恢复空间。!