合計 昨日 今日

ラングレンス c言語

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: please
[URL]
Date: 2017年11月28日(火) 13:17
No: 1
(OFFLINE)

 ラングレンス c言語

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

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

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

Name: かずま
[URL]
Date: 2017年12月07日(木) 08:54
No: 2
(OFFLINE)

 Re: ラングレンス c言語

10日も経てば、質問者はもう見ていないでしょう。
コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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);
}


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[13人]