将字符串压缩为较小的字符串

时间:2014-04-17 17:55:57

标签: c# c#-4.0

例如,将“hashdkjhs654asdkjlsdakjhakjhkkajdssdsa”设为“Gf5i”

我试过这种方式但是失败了。

private void encodeToolStripMenuItem_Click(object sender, EventArgs e)
    {
        UTF8Encoding utf8 = new UTF8Encoding();
        string textstring;
        string encodedString;
        textstring = richTextBox1.Text;
        byte[] encodedBytes = utf8.GetBytes(textstring);
        richTextBox1.Clear();
        encodedBytes.ToString(encodedString);
        richTextBox1.Text = encodedString;
    }

1 个答案:

答案 0 :(得分:1)

你想要做的是编写一个压缩字符串的算法。然而,这不是你可以通过掰手指而做的事情。

您首先应该考虑您正在接收的原始输入类型:它是人文易于理解的文本吗?然后我的建议是使用模式搜索算法,该算法寻找重复的字符序列并标记它们的位置,而不是从那一点开始使用它们的坐标。这就是大多数文件压缩算法,如WinRar,主要做的。要对您进行解码,然后迭代压缩的字符串,查找坐标标题并使用它们重新整合整个事物。

编辑:此外,您的解决方案是错误的,因为byte []的字符串参数.ToString( string )不是您要分配的变量,而是格式。你应该做点什么:

private void encodeToolStripMenuItem_Click(object sender, EventArgs e)
    {
        UTF8Encoding utf8 = new UTF8Encoding();
        string textstring;
        string encodedString;
        textstring = richTextBox1.Text;
        byte[] encodedBytes = utf8.GetBytes(textstring);
        richTextBox1.Clear();
        encodedString = encodedBytes.ToString();
        richTextBox1.Text = encodedString;
    }

但我怀疑这会使字符串显着缩短。