Hogyan tudom elérni azt a Vigenére-kódolásban, hogy a szóközöket és egyébb karaketereket ne kódolja?
C nyelvben próbálom megprogramozni ezt a fajta kódolást. Sikerült is, csak az a baj, hogy a szóközt és a betűkön kívül más karaktereket is bekódol, amit én nem szeretnék. Hogyan tudom ezt megfogalmazni? Mivel a kulcsom és a kódolni való szövegem const charként van megadva, ezért készítettem belőlük egy másolatatot, átalakítottam mind nagybetűre, ezt a kódrészemből kihagyom, és csak a kódolósrészét írtam le.
for (i=0;i<strlen(copy);i++)
{
copy[i]=(copy[i]+copykey[i])%26+'A';
}
Hogyha a Hello World! mondatot szeretném kódolni, akkor azt kelle kapnom, hogy "JSXAI PSINR!" Kulcsszó:COMPUTER. Azonban én ezt kapom: JSXAIMAFEYQH4. Nagyon szépen kérlek titeket, Kedves Válaszadók, ha tudtok, szánjatok rám és erre a feladatra pár percet! Nagyon sokat segítenétek! :)
Akkor előszűrést kell alkalmaznod.
Végigfutsz az enkódolandó stringeden és kiszeded belőle azt amire nincs szükséged. Forrás_str > filter > cél_srt.
Hát a C-hez nem értek, de valahogy így:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i, j = 0;
char copy[255] = {'\0'};
char copykey[255] = {'\0'};
char vige[255] = {'\0'};
char text[] = "Hello world!";
char key[] = "computer";
for (i = 0; i < strlen(text); i++) copy[i] = toupper(text[i]);
for (i = 0; i < strlen(key); i++) copykey[i] = toupper(key[i]);
for (i = 0; i < strlen(copy); i++){
if (isupper(copy[i])){
vige[i] = (copy[i] + copykey[j]) % 26 + 'A';
j++;
if ( j >= strlen(copykey)) j = 0;
}
else vige[i] = copy[i];
}
printf("%s \n", copy);
printf("%s \n", copykey);
printf("%s \n", vige);
system("PAUSE");
return 0;
}
Nekem ez jön ki: "JSXAI PSINR!"
Nem → vige[i] = (copy[i] + copykey[i]) % 26 + 'A';
Hanem → vige[i] = (copy[i] + copykey[j]) % 26 + 'A';
A copykey indexe j !
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!