如何从字符串中恢复删除的空格
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。
也不要替换代码中的空格。只需对它们进行加密和解密,它们就会保留下来,也就是说,除非您保留索引信息,否则无法恢复空间。!
我有 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。 也不要替换代码中的空格。只需对它们进行加密和解密,它们就会保留下来,也就是说,除非您保留索引信息,否则无法恢复空间。!