【问题标题】:Compress string to smaller string将字符串压缩为更小的字符串
【发布时间】:2014-04-17 17:55:57
【问题描述】:

例如将“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;
    }

【问题讨论】:

标签: c# c#-4.0


【解决方案1】:

您要做的是编写一个压缩字符串的算法。然而,这并不是你打个响指就能做到的事情。

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

编辑:另外,您的解决方案是错误的,因为 byte[].ToString(string) 的 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;
    }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多