ラングレンス c言語

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
please

ラングレンス c言語

#1

投稿記事 by please » 7年前

ラングレンス
文字列の圧縮処理の対象となる2文字の組み合わせデータ(以下、組みデータという)を、次に示す圧縮方法により圧縮した文字列形式に変換して、標準出力に表示するプログラムを作成せよ。
圧縮前の文字列は、英大文字'A'〜'Z'のみで構成され、1組以上500組以下の組みデータを含む(最大2,000文字)。
圧縮方法
同一の組みデータが3組以上続く場合は、'*'+連続数+組データの文字列に変換して表示する。
同一の組みデータが2組以下の場合は、組みデータをそのまま表示する。
例1
標準入力
ABAB
出力結果
ABAB

例2
標準出力
ABABAB
出力結果
*3AB

例3
標準入力
ABCDCDCDCDCDCEF
出力結果
AB*5CDCEF

かずま

Re: ラングレンス c言語

#2

投稿記事 by かずま » 7年前

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);
}

返信

“C言語何でも質問掲示板” へ戻る