2011-02-07 24 views
-1

C#で長い文字列を圧縮するときに短い文字列を取得する方法。文字列を圧縮/伸長した後に短い文字列を取得する方法は?

長い文字列を短い文字列(最小の長さ)に圧縮し、元の文字列を元に戻すために復元する必要があります。最小長さとは、元の文字列の長さが10の場合、圧縮された文字列の長さは元の文字列の半分以下でなければなりません。

.Net組み込みライブラリ以外のライブラリは使用しません。

For example: Original String: "Hello World" 
Compressed String: "$n(@3" //something like this. 

私は別の方法を使用しますが、この方法では圧縮しません。 ありがとうございます。

+1

だから、どの言語で答えが欲しいですか?あなたは3つの言語と1つのプラットフォームを投稿しました。また、あなたの問題定義はあまりにも曖昧であり、有用な答えが与えられない(例えば、 "最小長さ" - _what_最小長さ)? – Oded

+0

C++、C#.Net、VB.Netのような言語です。私はそれを私のC#に変換できます。最小長さとは、元の文字列の長さが10の場合、圧縮された文字列の長さを元の半分以下にする必要があります。 – mirfan00

+0

ほとんどの場合、このような圧縮された文字列では、印刷できない文字やUnicode以外の記号を取得することになります。あなたはここで何を解決しようとしていますか?なぜ、それらを新しい*文字列*に圧縮する必要がありますか? –

答えて

3

は2.0以降.NETです。

private static string CompressLongString(string longString) 
{ 
    MemoryStream outstream = new MemoryStream(); 
    MemoryStream instream = new MemoryStream(Encoding.UTF8.GetBytes(longString)); 

    using (GZipStream compress = 
     new GZipStream(outstream, 
     CompressionMode.Compress)) 
    { 
     instream.CopyTo(compress); 

    } 

    return Encoding.Unicode.GetString(outstream.GetBuffer()); 
} 
+0

プリアンブルでは、結果はおそらく短い文字列に対して_より長くなります。 – Oded

+0

@Odedもちろん。しかし、**「長い文字列を圧縮する」**という質問はありませんか? – Aliostad

+0

GZipStreamは文字列ではなく、バイトストリーム用です。 –

-4

私は魔法をお勧めします。文字列は単なる一連の数字であり、どれも破棄できず、文字列を同じに保つことはできません。したがって、ストリングを圧縮するには、ストリングがなければ生き残ることができるかどうかを判断し、それを行うためのルールを作成する必要があります。私はどんな一般的な方法も考えることができないので、あなた自身のルールを作る必要があります。

1

あなたの本当のプロンプトは何ですか?非常に長い文字列を圧縮してメモリを節約したい場合は、UTF-8で配列byte[]に変換することができます。 MemoryStreamオブジェクトを作成し、MemoryStreamのUTF-8にStreamWriterを作成し、そこに文字列を書き込みます。その後、ストリームライターとストリームを閉じて、ToArray()を使用してコンパクトアレイに変換します。これにより多くの一時的なオブジェクトが作成されますが、結果の配列はしばしば元の文字列よりもずっと小さくなります。

これは圧縮ではなく、通常は文字列で通常使用されるUTF-16よりも50%小さいUTF-8に文字をエンコードすることに注意してください。また、要求したとおりに標準の.NETライブラリを使用して実行されます。 (しかし結果はあなたが望むように文字通り文字列ではありません)

+0

いずれのコード例も高く評価されています。 – mirfan00

0

私はあなたがデータベースサイズを保存したいと思います。

文字列を10文字で圧縮しても、あまり効果がありません。そしてある割合を勝ち取るために保証されていません(すでに圧縮された文字列を圧縮することはできません)。

テーブル内のすべての文字列(文字列と数字のプライマリキー)を格納し、他のテーブルのキーだけで文字列を参照できます。繰り返しの文字列がある場合。あなたの文字列が繰り返されない場合は、各文字列を単語に分割し、単語のインデックスを格納することがあります。

関連する問題