ラングレンス
文字列の圧縮処理の対象となる2文字の組み合わせデータ(以下、組みデータという)を、次に示す圧縮方法により圧縮した文字列形式に変換して、標準出力に表示するプログラムを作成せよ。
圧縮前の文字列は、英大文字'A'〜'Z'のみで構成され、1組以上500組以下の組みデータを含む(最大2,000文字)。
圧縮方法
同一の組みデータが3組以上続く場合は、'*'+連続数+組データの文字列に変換して表示する。
同一の組みデータが2組以下の場合は、組みデータをそのまま表示する。
例1
標準入力
ABAB
出力結果
ABAB
例2
標準出力
ABABAB
出力結果
*3AB
例3
標準入力
ABCDCDCDCDCDCEF
出力結果
AB*5CDCEF
ラングレンス c言語
Re: ラングレンス c言語
10日も経てば、質問者はもう見ていないでしょう。
#include <stdio.h>
void flush(int n, int a, int b)
{
if (n < 6)
while ((putchar(a), --n) && (putchar(b), --n)) ;
else
printf("*%d%c%c", n >> 1, a, b), (n & 1) && putchar(a);
}
int main(void)
{
int a, b, c, n = 0;
while ((c = getchar()) != EOF)
(n == 0) ? (a = c, n = 1) :
(n == 1) ? (b = c, n = 2) :
(n == 2) ? (c == a) ? n++ : (putchar(a), a = b, b = c) :
(n & 1) ? (c == b) ? n++ : (flush(n-1, a, b), b = c, n = 2)
: (c == a) ? n++ : (flush(n, a, b), a = c, n = 1);
flush(n, a, b);
}