PATの基本的な1078列圧縮と解凍(20分)

同じ文字と表現される文字を含むこのフラグメントの文字の数を持つ別個のセグメント:多くのテキスト圧縮方法は、我々は唯一の最も簡単な種類を考慮し、ここで、があります。例えば、  ccccc 使用すること  5c を表すために。文字が繰り返されていない場合は、それが出力されます。例えば、  aba それは圧縮され続けます  aba

同様に伸張方法は、順番に、形作られている  5c そのような表現が復元されます  ccccc

リクエスト処理のために与えられた文字列の圧縮や解凍の必要性、その。ここでは、単に元の文字列が完全に英語の文字とスペースの非空の文字列であることを前提としています。

入力フォーマット:

与えられた入力文字の最初の行、場合  C には、圧縮されている以下の文字列を意味するならば  D 、それは次の文字列を解凍することを意味します。2行目は、末尾にキャリッジリターンで、圧縮または1000文字の文字列を解凍する必要はありません提供します。整数の範囲、および出力ファイルが1MB未満でないことを確実にするためにタイトルに繰り返される文字の数。

出力フォーマット:

圧縮または伸長要求文字列、および行の結果を出力します。

サンプル入力1:

C
TTTTThhiiiis isssss a   tesssst CAaaa as

出力サンプル1:

5T2h4is i5s a3 te4st CA3a as

サンプル入力2:

D
5T2h4is i5s a3 te4st CA3a as10Z

出力サンプル2:

TTTTThhiiiis isssss a   tesssst CAaaa asZZZZZZZZZZ
書式#include <iostreamの> 
の#include <ベクトル>
 使用して 名前空間はstdを、
構造体ノード{
     チャー CH。int型のval; 
}。
ベクター <ノード> V。
INT メイン()
{ 
    チャー CH。文字列strの。
    cinを >> CH; getlineの(CIN、STR); 
    getline(CIN、STR)。
    もし(CH == ' C '){ // 压缩 
        v.push_back({STR [ 0 ]、1 })。
        以下のためのint型 I = 1; iがstr.lengthを()<; I ++の場合(STR [I] == STR [I- 1 ])V [v.size() - 1 ] .val ++  v.push_back({STR [i]は、1 })。
        以下のためにint型 i = 0 ; i)は(v.sizeを<; I ++の場合(V [i]が.val == 1)のprintf(" %のC " 、V [i]の.CH)。
            のprintf(" %d個の%のC " 、V [i]は.val、V [i]の.CH)。
    }  { // 解压
        INT COUN = 0 以下のためにint型 i = 0 ; i)は(str.lengthを<; iは++ ){
             場合(COUNの== 0 && isdigit(STR [I])!)v.push_back({STR [i]は、1 })。
            そう であれば(isdigit(STR [I]))COUN = COUN * 10 +(STR [I] - ' 0 ' )。
            { 
                v.push_back({STR [i]は、COUN})。
                COUN = 0 ; 
            } 
        } 
        のためのint型 I = 0 ; iが(v.sizeを<); iが++ 、一方(V [i]が.val--)のprintf(" %のC " 、V [i]の.CH)。
    } 
    システム(一時停止)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/littlepage/p/11707220.html