同じ文字と表現される文字を含むこのフラグメントの文字の数を持つ別個のセグメント:多くのテキスト圧縮方法は、我々は唯一の最も簡単な種類を考慮し、ここで、があります。例えば、 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 ; }