Program szyfrujący/deszyfrujący projekt

Odpowiedz Nowy wątek
2016-11-06 17:14
0

koniec

edytowany 1x, ostatnio: lajtowo, 2016-11-21 22:51

Pozostało 580 znaków

2016-11-06 17:41

Mnie boli to, że wrzucasz kod, którego nie próbowałeś nawet uruchomić.

  1. W c nie ma czegoś takiego jak string -> unknown type name 'string'
  2. GaDeRy( stringtoencode, GADERYPOLUKIgaderypoluki ); to się nie wykona -> GADERYPOLUKIgaderypoluki undeclared
  3. printf("Wynik:\n", stringtoencode); -> ta linijka nic nie wyświetli
  4. Po wybraniu jednej opcji wchodzimy w nieskończonego while'a.
edytowany 1x, ostatnio: xfin, 2016-11-06 17:41
+ a wątek ma tag C#. - xfin 2016-11-06 17:57
tag jest na C - lajtowo 2016-11-06 20:23
Nie, tag jest na C#. Jeszcze aż tak nie oślepłem żeby nie zobaczyć hasha na labelce pod tytułem :) - xfin 2016-11-06 22:19
Aaa to mój błąd, tego C# u góry nie widziałem, pierwszy post - pierwsze błędy. Przy kolejnych będzie lepiej :) - lajtowo 2016-11-06 22:30

Pozostało 580 znaków

2016-11-06 20:47
0
#include <stdio.h>
#include <stdlib.h>

#define MSG_SIZE 20

//na potrzeby programu moja wlasna implementacja
int strlen(char* str)
{
    int len = 0;
    while(str[len] != 0)
    {
        ++len;
    }
    return len;
}

//wyczyszczenie szyfru z myslnikow
char* cleanCipher(char* cipher)
{
    int i, j;

    int cipherSize = strlen(cipher);
    char* cleaned = (char*) calloc(cipherSize, sizeof(char));

    j=0;
    for(i = 0; i < cipherSize; ++i)
    {
        if(cipher[i] != '-')
        {
            cleaned[j] = cipher[i];
            ++j;
        }
    }
    return cleaned;
}

char substitute(char letter, char* cipher)
{
    int i;
    int cipher_length = strlen(cipher);
    char substitution = letter;

    for(i = 0; i < cipher_length; ++i)
    {
        if(cipher[i] == letter)
        {
            substitution = cipher[(i%2) ? (i-1) : (i+1)];
            break;
        }
    }
    return substitution;
}

void GaDeRy(char* stringtoencode, char* fullcipher)
 {
     int i;
     char* cipher = cleanCipher(fullcipher);
     int string_length = strlen(stringtoencode);

     for(i = 0; i < string_length; ++i)
     {
         stringtoencode[i] = substitute(stringtoencode[i], cipher);
     }
}

int main()
{
    char* cipher1 = "GA-DE-RY-PO-LU-KI";
    char* cipher2 = "PO-LI-TY-KA-RE-NU";
    char* cipher3 = "KA-CE-MI-NU-TO-WY";

    char stringtoencode[MSG_SIZE] = {'0'};
    int option;
    printf("Enter a string that you want to encode:\nMax 20 characters\n");
    scanf("%s", &stringtoencode);

    printf("Choose the cipher\n");
    printf("[1]GA-DE-RY-PO-LU-KI\n");
    printf("[2]PO-LI-TY-KA-RE-NU\n");
    printf("[3]KA-CE-MI-NU-TO-WY\n");

    scanf("%d",&option);

    switch(option)
    {
        case 1: GaDeRy(stringtoencode, cipher1 );
            break;
        case 2: GaDeRy(stringtoencode, cipher2 );
            break;
        case 3: GaDeRy(stringtoencode, cipher3 );
            break;
    }
   printf("Encrypted as: %s\n", stringtoencode);
}

Uwagi do kodu:

  1. Jeśli wczytywany ma być tekst ze spacjami to trzeba zamienić scanf na fgets, albo użyć character classes.
  2. Zamiast tego switcha można zrobić tablicę szyfrów i potem:
    GaDeRy(stringtoencode, cipher[option] );
Dzięki wielkie, ale nie obędzie się bez pytań ;) 1) char stringtoencode[MSG_SIZE] = {'0'}; a dokładnie MSG_SIZE, tak po prostu co to ? 2) Czy ta Twoja implementacja jest potrzebna ? 3) Co czyni 'calloc' i 'substitution = cipher[(i%2) ? (i-1) : (i+1)];' ? 4) I czy, aby kod odczytywał treść do zakodowania z pliku to duży problem ? - lajtowo 2016-11-06 21:33
1. #define MSG_SIZE 20 - sztywny define na max wielkość wiadomości. 2. Tak jest potrzebna - liczy długość wiadomości w char*. 3. ten twór z operatorem trójargumentowym wylicza literę do zamiany (generalnie ma trafić w parę). 4. Żaden problem - operacja I/O na plikach i jazda ;) - xfin 2016-11-06 21:45
A mogę prosić o ostatnią prośbę jak to z tymi plikami zrobić :D Dzięki za tą pomoc :) - lajtowo 2016-11-06 21:52
Nie no, wybacz, ale robić tego to już nie będę ;) Tutaj musisz tylko wykombinować jak zamienić scanf na wczytanie danych z pliku, to naprawdę nic trudnego. O np. tutaj czytanie linia po linii http://stackoverflow.com/ques[...]1338/c-read-file-line-by-line - xfin 2016-11-06 22:17
Okey, to już wykombinuje :) - lajtowo 2016-11-06 22:19

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0