Zdravím, řešil jsem projekt na šifrování pomocí záměny znaků, snažil jsem na to jít přes pole. V jednom poli byla seřazena abeceda a v druhém na odpovídajícím indexu zaměněný znak. Jenže jsem zjistil, že zadaní znělo:
Program bude provádět šifrování vstupního souboru pomocí tabulky uložené v jiném souboru. Vstupy: Program dostane na svůj vstup soubor s textem, který má zašifrovat a soubor s kódy, podle kterých bude provádět šifrování.
Příklad tabulky kódů
A;0
B;1
C;2
D;3.
Nemám už moc času a vážne nevím co s tím. Najde se někdo ochotný pomoct?
Fórum › C / C++
Šifrovací program
Pokud máš již šifrování přes tabulku v poli, tak máš půlku hotovou. Zbývá ti jenom na začátku programu tuto tabulku (pole) naplnit daty ze souboru. Na tom není nic těžkého...
#include <iostream>
#include <stdio.h>
using namespace std;
const char* input_file = "F:/input.txt";
//const char* pole1 = "abcdefghijklmnopqrstuvwxyz";
char* pole1 = "ahoj";
char * pole2 = "abcd";
//const char* pole2 = "angiuanjanfaoiefnaisnfekua";
void main()
{
FILE *file;
file = fopen(input_file,"r");
if (file == NULL){
printf("NENASEL SEM SOUBOR PANE REDITELI! %s \n",input_file);
return;
}
char input_char;
while(fscanf(file,"%c",&input_char) != EOF)
{
char * pole_help = "";
pole_help = pole1;
while(*pole_help != '\0')
{
if(*pole_help == input_char)
{
char * vymeneny_znak = pole2; // tady nevím co s tím :)
printf("%c => %c\n",*pole_help,*vymeneny_znak);
}
//printf("%c\n",input_char);
*pole_help++;
}
}
getchar();
}
char * pole_help = "";
pole_help = pole1;
Pole (tudíž i řetězec) je v C/C++ reprezentováno jako ukazatel na první prvek pole. Z toho plyne, že pole (řetězce) se nedají jednoduše přiřazovat pomocí =. Tím pouze přiřadíš jednomu ukazateli hodnotu toho druhého, ale nic nezkopíruješ. Mrkni na funkci strcpy a vůbec zvaž, jestli je všechno toto přiřazování nutné.
Konstrukce
while(*pole_help != '\0')
je trochu zvláštní, ale fungovat bude. Jen je potřeba inkremetnovat ukzatel, ne data, na která ukazuje - tudíž *pole_help++; nahraď pole_help++;
Dále jsem to nějak podrobněji nezkoumal - toto jsou chyby, které mě jako první udeřily do očí. Celkově tam zbytečně používáš moc ukazatelů (a odtud pramení všechny chyby). Doporučuju si ještě jednou v hlavě ujasnit, co to ukazatel je, jak funguje a jaké se s ním dají provádět operace.
Trochu mě ještě jen zaráží, proč includujš iostream, když z něj stejně nic nepoužíváš (dokonce to píšeš v C, nikoliv C++). Navíc ani nepoužíváš nic z jmenného prostoru std - řádek using namespace std je tudíž zbytečný. Nevím jaké je zadání, ale pokud nejsi limitovaný C a můžeš použít C++, tak bych neváhal použít třídu string (popř. i třídy fstream apod). Tím by sis ušetřil hodně trápení.
Mel jsem trochu casu, tak jsem si udelal takovy programek na sifrovani. Mozna nekomu nejak poslouzi :)
Zdrojovy kod a exe soubor:
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
šifrovací program ? — založil TonyB
Šifrovací program — založil Tase
Program, ktory otvori iny program — založil Nummi
C# program — založil Tomas.P
Moderátoři diskuze