1

Тема: Кодування та декодування даних. з Java в c++

Доброго дня. суть задачі: Створити систему кодування текстових данних, в якій кожен символ кодується комбінацією чотирьох символів. кодуючий символ може приймати одне із чотирьох значень, при цьому, типи закодованого символів (спецсимволи, великі чи малі літери, інше) задаеться першим кодуючим символоом
Щоб не вигадувати велосибед, за основу взяла генетичнийц код : A, G, C, T - кодуючі символи.
Створила чотиривимірний масив, та вівдповідны методи. програму написала на Яві, але викладач сказав, що необхідно переписати на с++, з яким я не надто товаришую. викладаю код на яві. можливо хлось знає, як його реалізувати на с++? Дякую.

import java.util.Scanner;

/**
 * @author D_Sky
 * Перший нуклеотид - вказує на регістр в таблиці
 * А - спецсимволи
 * G - малі літери
 * C - великі літери
 * T - додатково
 */
class H1 {
    static char[][][][] symbol = new char[][][][]
    {
        //A
        {
            //A
            {
                //A
                {
                    //A,G,C,T
                    ' ', '\n', '\t', '`'
                },
                //для економії місця увесь масив не викладую.
    };
    static String code = "";

    /**
     *  
     * @param args 
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();//отримуэмо вхідну строку
        char[] c = s.toCharArray();//отримуємо масив чарів
        //кодуємо отриману строку
        for(int i = 0; i < c.length; i++){
            code = code + codengChar(c[i]);
        }
        System.out.println(code);
        //декодуэмо строку
        System.out.println(decoding());
    }

    private static String codengChar(char c) {
        String s = "";
        boolean is = false;
        for(int i = 0; i < 4; i++){
            for(int a = 0; a < 4; a++){
                for(int b = 0; b < 4; b++){
                    for(int d = 0; d < 4; d++){
                        if((int)c == (int)symbol[i][a][b][d]){
                            s += getDNACode(i);
                            is = true;
                            break;
                        }
                    }
                    if(is){break;}
                }
                if(is){break;}
            }
            if(is){break;}
        }
        return s;
    }

    private static String getDNACode(int i){
        switch(i){
            case 0 : return "A";
            case 1 : return "G";
            case 2 : return "C";
            case 3 : return "T";
            default : return "";
        }
    }

    private static String decoding() {
        String s = "";
        String[] segment = cut(4);
        for(int i = 0; i < segment.length; i++){
            char[] c = segment[i].toCharArray();
            s += symbol[getIntValue(c[0])][getIntValue(c[1])][getIntValue(c[2])][getIntValue(c[3])];
        }
        return s;
    }

    private static String[] cut(int a) {
        String[] s = new String[code.length() / a];
        int ind = 0;
        for(int i = 0; i < code.length(); i += a){
            s[ind] = i + a < code.length() ? code.substring(i, i + a) : code.substring(i);
        }
        return s;
    }

    private static int getIntValue(char c) {
        int i = -1;
        if(c == 'A'){
            i = 0;
        }else if(c == 'G'){
            i = 1;
        }else if(c == 'C'){
            i = 2;
        }else if(c == 'T'){
            i = 3;
        }
        return i;
    }

}

2

Re: Кодування та декодування даних. з Java в c++

Вибачте, прогавилаЖ  :           
                     

if((int)c == (int)symbol[i][a][b][d]){
                            s += getDNACode(i);
                            is = true;
                            break;
                        }

має бути

                        if((int)c == (int)symbol[i][a][b][d]){
                            s += getDNACode(i);
                            s += getDNACode(a);
                            s += getDNACode(b);
                            s += getDNACode(d);
                            is = true;
                            break;
                        }