0

課題を開始する方法がわかりません。

ランレングス エンコーディング プログラムを作成する必要があり、

たとえば、ユーザーは次の文字列を入力します。

aaaaPPPrrrrr

に置き換えられます

4a3P5r

誰かが私がそれを始めるのを手伝ってくれますか?

4

7 に答える 7

6

うまくいけば、これがあなたの割り当てを開始するのに役立ちます:

ランレングス エンコーディングの背後にある基本的な考え方は、aaaa のような連続するトークンを短い形式の 4a (「次の 4 文字は 'a'」であることを意味します) に置き換えることができるということです。このタイプのエンコーディングは、コンピュータ グラフィックスの初期の頃、画像を保存する際のスペースを節約するために使用されていました。当時、ビデオ カードは少数の色しかサポートしておらず、画像のかなりの部分で同じ色が一列に並んでいるのが一般的でした)。

ウィキペディアで詳しく読むことができます

http://en.wikipedia.org/wiki/Run-length_encoding

文字列をランレングス エンコードするために、入力文字列内の文字をループできます。同じキャラクターを連続して何回見たかをカウントするカウンターを用意します。その後、別の文字が表示されたら、カウンターの値を出力してから、数えていた文字を出力します。カウンターの値が 1 の場合 (これらの文字が連続して 1 つしか表示されないことを意味します)、カウンターの出力をスキップします。

于 2012-07-11T22:06:10.950 に答える
1
public String runLengthEncoding(String text) {
    String encodedString = "";

    for (int i = 0, count = 1; i < text.length(); i++) {
        if (i + 1 < text.length() && text.charAt(i) == text.charAt(i + 1))
            count++;
        else {
            encodedString = encodedString.concat(Integer.toString(count))
                    .concat(Character.toString(text.charAt(i)));
            count = 1;
        }
    }
    return encodedString;
}

これを試してみてください。

于 2016-11-21T07:18:46.987 に答える
0

これを試してください:

private static String encode(String sampleInput) {
    String encodedString = null;
    //get the input to a character array.
    //  String  sampleInput = "aabbcccd";
    char[] charArr = sampleInput.toCharArray();
    char prev=(char)0;
    int  counter =1;
    //compare each element with its next element and 
    //if same increment the counter
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < charArr.length; i++) {
        
        if(i+1 < charArr.length && charArr[i] == charArr[i+1]){
            counter ++;
        }else {
            //System.out.print(counter + Character.toString(charArr[i]));
            sb.append(counter + Character.toString(charArr[i]));
            counter = 1;
        }
        
    }
    return sb.toString();
}
于 2021-02-27T05:49:00.197 に答える
-1
import java.util.Scanner;
/**
 * @author jyotiv
 *
 */
 public class RunLengthEncoding {
 /**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Enter line to encode:");
    Scanner s=new Scanner(System.in);
    String input=s.nextLine();
            int len = input.length();
            int i = 0;
            int noOfOccurencesForEachChar = 0;
            char storeChar = input.charAt(0);

            String outputString = "";
            for(;i<len;i++)
            {
                if(i+1<len)
                {
                    if(input.charAt(i) == input.charAt(i+1))
                    {
                        noOfOccurencesForEachChar++;
                    }
                    else
                    {
                        outputString = outputString + 
   Integer.toHexString(noOfOccurencesForEachChar+1) + storeChar;
                        noOfOccurencesForEachChar = 0;
                        storeChar = input.charAt(i+1);
                    }
                }
                else
                {
                    outputString = outputString + 
 Integer.toHexString(noOfOccurencesForEachChar+1) + storeChar;
                }
            }

            System.out.println("Encoded line is: " + outputString);   

        }

}

私はこれを試しました。それは確かに機能します。

于 2017-07-04T07:53:15.040 に答える