2011-02-07 2 views
-1

C#에서 긴 문자열을 압축 할 때 짧은 문자열을 얻는 방법.문자열을 압축/압축 해제 한 후 짧은 문자열을 얻는 방법은 무엇입니까?

짧은 문자열 (최소 길이)로 긴 문자열을 압축하고 원래의 문자열을 복원하기 위해 압축을 풀고 싶습니다. 최소 길이의 경우 원래 문자열 길이가 10이면 압축 된 문자열 길이는 원본의 절반 이하 여야합니다.

.NET 내장 라이브러리 이외의 라이브러리를 사용하고 싶지 않습니다.

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

나는 다른 방법을 사용하지만이 manner.Any 도움말에서 압축하지? 미리 감사드립니다.

+1

그래서 어떤 언어로 대답 하시겠습니까? 3 개의 언어와 플랫폼을 게시했습니다. 또한, 문제 정의는 유용한 답변을 얻기에는 너무 모호합니다 (예 : "최소 길이"- _ 최소 길이)? 원래 문자열의 길이가 10 인 경우 최소 길이로 .. 내 C#으로 변환 할 수 있습니다 C++, C# .NET 및 VB.Net.I 같은 – Oded

+0

모든 언어는 압축 된 문자열의 길이가 원래 이하의 절반을 ㄱ해야 의미합니다. – mirfan00

+0

대부분 압축 된 문자열에서 인쇄 할 수없는 문자 또는 비 유니 코드 기호를 얻게 될 가능성이 큽니다. 여기서 정확하게 해결하려고하는 것은 무엇입니까? 왜 새로운 문자열로 압축해야합니까? –

답변

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-8, UTF-16 보통 문자열의 사용보다 일반적으로 50 % 작은 문자를 부호화 압축하지 않은 것

참고. 그리고 요청한대로 표준 .NET 라이브러리를 사용하여 완료됩니다. (그러나 결과는 당신이 원하는대로 문자열은 문자 그대로되지 않습니다.) 난 당신이 데이터베이스 크기를 저장하려면 이해 귀하의 의견에서

+0

모든 코드 예는 높이 평가됩니다. – mirfan00

0

은.

10 자로 문자열을 압축해도 큰 도움이되지 않습니다. 그리고 특정 비율 (당신은 이미 압축 된 문자열을 압축 할 수 없습니다) 이기기 위해 보증되지 않습니다.

당신은 (문자열 및 숫자 기본 키) 테이블에있는 모든 문자열을 저장하고, 다른 테이블에서 바로 키를 사용하여 문자열을 참조 할 수 있습니다. 반복되는 문자열이있는 경우. 문자열이 반복되지 않으면 각 문자열을 단어로 분리하고 단어의 색인을 저장할 수 있습니다.

관련 문제