Тема: Кодування та декодування даних. з Java в c++
Доброго дня. суть задачі: Створити систему кодування текстових данних, в якій кожен символ кодується комбінацією чотирьох символів. кодуючий символ може приймати одне із чотирьох значень, при цьому, типи закодованого символів (спецсимволи, великі чи малі літери, інше) задається першим кодуючим символом
Щоб не вигадувати велосипед, за основу взяла генетичнийц код : A, G, C, T - кодуючі символи.
Створила чотиривимірний масив, та вівдповідні методи. програму написала мовою Java, але викладач сказав, що необхідно переписати на C++, з яким я не надто товаришую. викладаю код мовою Java. можливо хтось знає, як його реалізувати на C++? Дякую.
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;
}
}