Witam.
Chciałbym napisać program szyfrujący i deszyfrujący, ale kompletnie nie wiem jak się za niego zabrać.
Szyfr miałby polegać na tym, że np. wyraz "Ala" to 21 53 21.(tylko bez przerw). 2 to numer na klawiaturze w telefonie gdzie znajdziemy tę literkę, a druga cyfra (w tym przypadku 1) to ile razy trzeba nacisnąć ten przycisk, aby wypisać tę literkę. Mówię o pierwszej parze "21". 0 to przerwa i tak dalej..
0
0
Możesz zrobić to np. tak:
#include <stdio.h>
struct Kodowanie {
int miejsce;
int ilosc;
};
typedef struct Kodowanie Kodowanie;
Kodowanie szyfr[256];
void init(void) {
/* Tutaj wypelniamy tablice szyfr wartosciami, np.: */
szyfr['a'].miejsce = 2;
szyfr['a'].ilosc = 1;
/* Mozna tez zrobic jakas petle. */
}
int main(void) {
init();
printf("a -> %d%d\n", szyfr['a'].miejsce, szyfr['a'].ilosc);
return 0;
}
(ideone)
Jeszcze innym sposobem byłoby założenie, że taki tekst może mieć maksymalnie 2 znaki i przechowywanie od razu gotowych łańcuchów:
char szyfr[256][3];
sprintf(szyfr['a'], "%d%d", 2, 1);
(ideone)
0
const char *code(char ch)
{
static struct phonecode { const char ch; const char phone[3]; } tb[]=
{
{'a',"21"}, {'b',"22"}, {'c',"23"},
{'d',"31"}, {'e',"32"}, {'f',"33"},
...
};
for(unsigned i=0;i<sizeof(tb)/sizeof(*tb);++i) if(ch==tb[i].ch) return tb[i].phone; // zastanowić się nad wyszukiwaniem binarnym
return NULL;
}
0
@_13th_Dragon ale to przecież c++ więc czemu nie użyć do tego mapy?
0
Wiecie, nie miałem niektórych rzeczy na lekcji. I nauczyciel (bo to na lekcje) może mieć pretensje że tego użyłem itd .. Jakoś prościej? Ew. szyfr w którym alfabet będzie wspak czyli a-z, b-y. Nie było mnie na tych lekcjach, więc jest kłopot.
0
Uzupełniasz i po sprawie:
const char *code(char ch)
{
if(ch<'m')
{
if(ch<'g')
{
if(ch<'c')
{
if(ch<'b') return ch<'a'?NULL:"21"
else return "22"; //b
}
else
{
}
}
else
{
}
}
else
{
}
}
0
{'a',"21"}, {'b',"22"}, {'c',"23"},
{'d',"31"}, {'e',"32"}, {'f',"33"},
Ale po co dwa elementy? Zamiast pierwszego można operować indeksem.
{"21","22","23","31","32","33",...}
i wiemy, że pod indeksem [0]
jest 'a'
, więc wystarczy odjąć 'a'
od szukanej litery, by otrzymać indeks do tablicy.
1
Najlepiej tak, nie jest optymalnie, ale zrozumiale i prosto:
const char *buttons= {
"", // 0
" ", "abc", "def",
"ghi", "jk;", "mno",
"pqrs", "tuv", "wxyz"
};
bool encodeChar(char ch, char *buff) {
ch = lower(ch);
if (isalpha(ch)) {
int i, j;
for (i=2; i<=9; ++i) {
char *p = strchr(buttons[i], ch);
if (p) {
j = p-buttons[i]+1;
break;
}
}
sprintf(buff, "%d%d", i, j);
return true;
} else {
sprintf(buff, "%c", ch);
return false;
}
}