创建一个函数,将任何给定的字符串编码为压缩形式!让函数 RebelEncoding(str) 接受一个字符串参数并返回编码后的字符串,返回值不得包含任何标点符号。
static string RebelEncoding(string str)
{
if (str == null || str == "")
{
return str;
}
StringBuilder sb = new StringBuilder();
char prevChar = str[0];
int count = 1;
for(int i = 1;i < str.Length;i++)
{
if (!Char.IsPunctuation(str[i]))
{
if (str[i] == prevChar)
{
count++;
}
else
{
sb.Append(count);
sb.Append(prevChar);
prevChar = str[i];
count = 1;
}
}
}
sb.Append(count);
sb.Append(prevChar);
string results = sb.ToString();
if (results.Length >= str.Length)
{
return results;
}
return results;
}
static void Main(string[] args)
{
string results;
results=RebelEncoding("Squad Beta-111 attack!");
Console.WriteLine(results);
Console.ReadLine();
}
我的输出:
1S1q1u1a1d1 1B1e1t1a311 1a2t1a1c1k
1S1q1u1a1d 1B1e1t1a31 1a2t1a1c1k
由于标点符号位于输入空间中(可能与所有其他字符一起,尽管没有说明)但不在输出空间中,因此您正在将较大的集合映射到较小的集合中。
唯一的解决方案是用多个字符来表示不需要的标点符号。您可以像在许多语言中一样使用转义,例如
\uxxxx
可能代表您不想包含的字符的 Unicode 值,而 \\
代表转义字符反斜杠,或者您可以对每个字符使用多字符编码。
一种常见的多字符编码是 Base64。