Oppure

Loading
07/06/09 18:02
VoV
Buonasera a tutti avrei un problema per quanto riguarda le stringhe;
in poche parole io sto creando un crypter con un algoritmo piuttosto semplice, ovvero
inserita una parola o più le lettere verranno spostate di N caratteri dove N è la lunghezza della stringa, con l'aggiunta del numero in questione prima e dopo la stringa criptata; quindi avremo ciao = 4gmes4
fin qui tutto ok.
il problema è l'inverso ovvero quando vado a decrittare 4gmes4 dovrebbe restituirmi solo ciao, mentre, ovviamente restituisce 0ciao0 vorrei chidere se siete a conoscenza del metodo per cui potessi tagliare il primo e l'ultimo carattere

so che esiste la funzione strtok() ma ho qualche difficoltà a utilizzarla
e so anche che potrei far si che la stringa venga considerata da un carattere dopo e farla finire con Buonasera a tutti avrei un problema per quanto riguarda le stringhe;
in poche parole io sto creando un crypter con un algoritmo piuttosto semplice, ovvero
inserita una parola o più le lettere verranno spostate di N caratteri dove N è la lunghezza della stringa, con l'aggiunta del numero in questione prima e dopo la stringa criptata; quindi avremo ciao = 4gmes4
fin qui tutto ok.
il problema è l'inverso ovvero quando vado a decrittare 4gmes4 dovrebbe restituirmi solo ciao, mentre, ovviamente restituisce 0ciao0 vorrei chidere se siete a conoscenza del metodo per cui potessi tagliare il primo e l'ultimo carattere

so che esiste la funzione strtok() ma ho qualche difficoltà a utilizzarla
e so anche che potrei far si che la stringa venga considerata da un carattere dopo e farla finire con {parsed_message} però non ho bene idea sul come fare se potreste postarmi un abbozzo di codice ve ne sarei grato

scusate per la lunghezza ^^

il mio source è questo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void crypt();
void decrypt();

int main()
{
    int scelta;

    printf("Crypter/Decrypter\n\n");
    printf("Non inserire spazi tra le parole, ma inserisci _\n");
    printf("Massimo 100 caratteri\n");
    printf("\n1)Criptare \n2)Decriptare \n3)Esci\n");
    printf("\nScegli un'operazione: ");
    scanf("%d", &scelta);
    switch (scelta){
           case 1:
                crypt();
           break;
           case 2:
                decrypt();
           break;
           case 3:
                return 0;
           break;
           default:
                   getchar();
                   printf("\nNumero non valido\n");
                   getchar();
                   printf("\nPremere un tasto per uscire");
           break;
           }
}

void crypt()
{
     int pos,j;
     char frase[100];
     
     printf("\nTesto da criptare: ");
     scanf("%99s",&frase);
     strcat(frase,"{parsed_message}");
     pos = 0;
     j = strlen(frase);
     while(frase[pos]!='{parsed_message}' && (pos < j )){
           frase[pos] += j;
           pos++;
           }
      printf("Testo criptato: %d%s%d\n\n",j , frase, j );
      getchar();
      printf("\nPremere un tasto per uscire");
      getchar();
}

void decrypt()
{
     int pos,j,x;
     char frase[100];
     
     printf("\nTesto da decriptare: ");
     scanf("%99s", &frase);
     strcat(frase,"{parsed_message}");
     pos = 0;
     j = strlen(frase);
     while(frase[pos]!='{parsed_message}' && (pos < j)){
           frase[pos] -= (j - 2);
           pos++;
           }
           x[frase] = 1;
       printf("Testo decriptato: %s\n\n", x);
       getchar();
       printf("\nPremere un tasto per uscire");
       getchar();          
}
però non ho bene idea sul come fare se potreste postarmi un abbozzo di codice ve ne sarei grato

scusate per la lunghezza ^^

il mio source è questo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void crypt();
void decrypt();

int main()
{
    int scelta;

    printf("Crypter/Decrypter\n\n");
    printf("Non inserire spazi tra le parole, ma inserisci _\n");
    printf("Massimo 100 caratteri\n");
    printf("\n1)Criptare \n2)Decriptare \n3)Esci\n");
    printf("\nScegli un'operazione: ");
    scanf("%d", &scelta);
    switch (scelta){
           case 1:
                crypt();
           break;
           case 2:
                decrypt();
           break;
           case 3:
                return 0;
           break;
           default:
                   getchar();
                   printf("\nNumero non valido\n");
                   getchar();
                   printf("\nPremere un tasto per uscire");
           break;
           }
}

void crypt()
{
     int pos,j;
     char frase[100];
     
     printf("\nTesto da criptare: ");
     scanf("%99s",&frase);
     strcat(frase,"Buonasera a tutti avrei un problema per quanto riguarda le stringhe;

in poche parole io sto creando un crypter con un algoritmo piuttosto semplice, ovvero
inserita una parola o più le lettere verranno spostate di N caratteri dove N è la lunghezza della stringa, con l'aggiunta del numero in questione prima e dopo la stringa criptata; quindi avremo ciao = 4gmes4
fin qui tutto ok.
il problema è l'inverso ovvero quando vado a decrittare 4gmes4 dovrebbe restituirmi solo ciao, mentre, ovviamente restituisce 0ciao0 vorrei chidere se siete a conoscenza del metodo per cui potessi tagliare il primo e l'ultimo carattere

so che esiste la funzione strtok() ma ho qualche difficoltà a utilizzarla
e so anche che potrei far si che la stringa venga considerata da un carattere dopo e farla finire con {parsed_message} però non ho bene idea sul come fare se potreste postarmi un abbozzo di codice ve ne sarei grato

scusate per la lunghezza ^^

il mio source è questo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void crypt();
void decrypt();

int main()
{
    int scelta;

    printf("Crypter/Decrypter\n\n");
    printf("Non inserire spazi tra le parole, ma inserisci _\n");
    printf("Massimo 100 caratteri\n");
    printf("\n1)Criptare \n2)Decriptare \n3)Esci\n");
    printf("\nScegli un'operazione: ");
    scanf("%d", &scelta);
    switch (scelta){
           case 1:
                crypt();
           break;
           case 2:
                decrypt();
           break;
           case 3:
                return 0;
           break;
           default:
                   getchar();
                   printf("\nNumero non valido\n");
                   getchar();
                   printf("\nPremere un tasto per uscire");
           break;
           }
}

void crypt()
{
     int pos,j;
     char frase[100];
     
     printf("\nTesto da criptare: ");
     scanf("%99s",&frase);
     strcat(frase,"{parsed_message}");
     pos = 0;
     j = strlen(frase);
     while(frase[pos]!='{parsed_message}' && (pos < j )){
           frase[pos] += j;
           pos++;
           }
      printf("Testo criptato: %d%s%d\n\n",j , frase, j );
      getchar();
      printf("\nPremere un tasto per uscire");
      getchar();
}

void decrypt()
{
     int pos,j,x;
     char frase[100];
     
     printf("\nTesto da decriptare: ");
     scanf("%99s", &frase);
     strcat(frase,"{parsed_message}");
     pos = 0;
     j = strlen(frase);
     while(frase[pos]!='{parsed_message}' && (pos < j)){
           frase[pos] -= (j - 2);
           pos++;
           }
           x[frase] = 1;
       printf("Testo decriptato: %s\n\n", x);
       getchar();
       printf("\nPremere un tasto per uscire");
       getchar();          
}
"); pos = 0; j = strlen(frase); while(frase[pos]!='Buonasera a tutti avrei un problema per quanto riguarda le stringhe;
in poche parole io sto creando un crypter con un algoritmo piuttosto semplice, ovvero
inserita una parola o più le lettere verranno spostate di N caratteri dove N è la lunghezza della stringa, con l'aggiunta del numero in questione prima e dopo la stringa criptata; quindi avremo ciao = 4gmes4
fin qui tutto ok.
il problema è l'inverso ovvero quando vado a decrittare 4gmes4 dovrebbe restituirmi solo ciao, mentre, ovviamente restituisce 0ciao0 vorrei chidere se siete a conoscenza del metodo per cui potessi tagliare il primo e l'ultimo carattere

so che esiste la funzione strtok() ma ho qualche difficoltà a utilizzarla
e so anche che potrei far si che la stringa venga considerata da un carattere dopo e farla finire con {parsed_message} però non ho bene idea sul come fare se potreste postarmi un abbozzo di codice ve ne sarei grato

scusate per la lunghezza ^^

il mio source è questo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void crypt();
void decrypt();

int main()
{
    int scelta;

    printf("Crypter/Decrypter\n\n");
    printf("Non inserire spazi tra le parole, ma inserisci _\n");
    printf("Massimo 100 caratteri\n");
    printf("\n1)Criptare \n2)Decriptare \n3)Esci\n");
    printf("\nScegli un'operazione: ");
    scanf("%d", &scelta);
    switch (scelta){
           case 1:
                crypt();
           break;
           case 2:
                decrypt();
           break;
           case 3:
                return 0;
           break;
           default:
                   getchar();
                   printf("\nNumero non valido\n");
                   getchar();
                   printf("\nPremere un tasto per uscire");
           break;
           }
}

void crypt()
{
     int pos,j;
     char frase[100];
     
     printf("\nTesto da criptare: ");
     scanf("%99s",&frase);
     strcat(frase,"{parsed_message}");
     pos = 0;
     j = strlen(frase);
     while(frase[pos]!='{parsed_message}' && (pos < j )){
           frase[pos] += j;
           pos++;
           }
      printf("Testo criptato: %d%s%d\n\n",j , frase, j );
      getchar();
      printf("\nPremere un tasto per uscire");
      getchar();
}

void decrypt()
{
     int pos,j,x;
     char frase[100];
     
     printf("\nTesto da decriptare: ");
     scanf("%99s", &frase);
     strcat(frase,"{parsed_message}");
     pos = 0;
     j = strlen(frase);
     while(frase[pos]!='{parsed_message}' && (pos < j)){
           frase[pos] -= (j - 2);
           pos++;
           }
           x[frase] = 1;
       printf("Testo decriptato: %s\n\n", x);
       getchar();
       printf("\nPremere un tasto per uscire");
       getchar();          
}
' && (pos < j )){ frase[pos] += j; pos++; } printf("Testo criptato: %d%s%d\n\n",j , frase, j ); getchar(); printf("\nPremere un tasto per uscire"); getchar(); } void decrypt() { int pos,j,x; char frase[100]; printf("\nTesto da decriptare: "); scanf("%99s", &frase); strcat(frase,"Buonasera a tutti avrei un problema per quanto riguarda le stringhe;
in poche parole io sto creando un crypter con un algoritmo piuttosto semplice, ovvero
inserita una parola o più le lettere verranno spostate di N caratteri dove N è la lunghezza della stringa, con l'aggiunta del numero in questione prima e dopo la stringa criptata; quindi avremo ciao = 4gmes4
fin qui tutto ok.
il problema è l'inverso ovvero quando vado a decrittare 4gmes4 dovrebbe restituirmi solo ciao, mentre, ovviamente restituisce 0ciao0 vorrei chidere se siete a conoscenza del metodo per cui potessi tagliare il primo e l'ultimo carattere

so che esiste la funzione strtok() ma ho qualche difficoltà a utilizzarla
e so anche che potrei far si che la stringa venga considerata da un carattere dopo e farla finire con {parsed_message} però non ho bene idea sul come fare se potreste postarmi un abbozzo di codice ve ne sarei grato

scusate per la lunghezza ^^

il mio source è questo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void crypt();
void decrypt();

int main()
{
    int scelta;

    printf("Crypter/Decrypter\n\n");
    printf("Non inserire spazi tra le parole, ma inserisci _\n");
    printf("Massimo 100 caratteri\n");
    printf("\n1)Criptare \n2)Decriptare \n3)Esci\n");
    printf("\nScegli un'operazione: ");
    scanf("%d", &scelta);
    switch (scelta){
           case 1:
                crypt();
           break;
           case 2:
                decrypt();
           break;
           case 3:
                return 0;
           break;
           default:
                   getchar();
                   printf("\nNumero non valido\n");
                   getchar();
                   printf("\nPremere un tasto per uscire");
           break;
           }
}

void crypt()
{
     int pos,j;
     char frase[100];
     
     printf("\nTesto da criptare: ");
     scanf("%99s",&frase);
     strcat(frase,"{parsed_message}");
     pos = 0;
     j = strlen(frase);
     while(frase[pos]!='{parsed_message}' && (pos < j )){
           frase[pos] += j;
           pos++;
           }
      printf("Testo criptato: %d%s%d\n\n",j , frase, j );
      getchar();
      printf("\nPremere un tasto per uscire");
      getchar();
}

void decrypt()
{
     int pos,j,x;
     char frase[100];
     
     printf("\nTesto da decriptare: ");
     scanf("%99s", &frase);
     strcat(frase,"{parsed_message}");
     pos = 0;
     j = strlen(frase);
     while(frase[pos]!='{parsed_message}' && (pos < j)){
           frase[pos] -= (j - 2);
           pos++;
           }
           x[frase] = 1;
       printf("Testo decriptato: %s\n\n", x);
       getchar();
       printf("\nPremere un tasto per uscire");
       getchar();          
}
"); pos = 0; j = strlen(frase); while(frase[pos]!='Buonasera a tutti avrei un problema per quanto riguarda le stringhe;
in poche parole io sto creando un crypter con un algoritmo piuttosto semplice, ovvero
inserita una parola o più le lettere verranno spostate di N caratteri dove N è la lunghezza della stringa, con l'aggiunta del numero in questione prima e dopo la stringa criptata; quindi avremo ciao = 4gmes4
fin qui tutto ok.
il problema è l'inverso ovvero quando vado a decrittare 4gmes4 dovrebbe restituirmi solo ciao, mentre, ovviamente restituisce 0ciao0 vorrei chidere se siete a conoscenza del metodo per cui potessi tagliare il primo e l'ultimo carattere

so che esiste la funzione strtok() ma ho qualche difficoltà a utilizzarla
e so anche che potrei far si che la stringa venga considerata da un carattere dopo e farla finire con {parsed_message} però non ho bene idea sul come fare se potreste postarmi un abbozzo di codice ve ne sarei grato

scusate per la lunghezza ^^

il mio source è questo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void crypt();
void decrypt();

int main()
{
    int scelta;

    printf("Crypter/Decrypter\n\n");
    printf("Non inserire spazi tra le parole, ma inserisci _\n");
    printf("Massimo 100 caratteri\n");
    printf("\n1)Criptare \n2)Decriptare \n3)Esci\n");
    printf("\nScegli un'operazione: ");
    scanf("%d", &scelta);
    switch (scelta){
           case 1:
                crypt();
           break;
           case 2:
                decrypt();
           break;
           case 3:
                return 0;
           break;
           default:
                   getchar();
                   printf("\nNumero non valido\n");
                   getchar();
                   printf("\nPremere un tasto per uscire");
           break;
           }
}

void crypt()
{
     int pos,j;
     char frase[100];
     
     printf("\nTesto da criptare: ");
     scanf("%99s",&frase);
     strcat(frase,"{parsed_message}");
     pos = 0;
     j = strlen(frase);
     while(frase[pos]!='{parsed_message}' && (pos < j )){
           frase[pos] += j;
           pos++;
           }
      printf("Testo criptato: %d%s%d\n\n",j , frase, j );
      getchar();
      printf("\nPremere un tasto per uscire");
      getchar();
}

void decrypt()
{
     int pos,j,x;
     char frase[100];
     
     printf("\nTesto da decriptare: ");
     scanf("%99s", &frase);
     strcat(frase,"{parsed_message}");
     pos = 0;
     j = strlen(frase);
     while(frase[pos]!='{parsed_message}' && (pos < j)){
           frase[pos] -= (j - 2);
           pos++;
           }
           x[frase] = 1;
       printf("Testo decriptato: %s\n\n", x);
       getchar();
       printf("\nPremere un tasto per uscire");
       getchar();          
}
' && (pos < j)){ frase[pos] -= (j - 2); pos++; } x[frase] = 1; printf("Testo decriptato: %s\n\n", x); getchar(); printf("\nPremere un tasto per uscire"); getchar(); }
aaa
07/06/09 19:13
theprogrammer
Un attimo ... il valore che inserisci prima e dopo, non e' detto che sia di una sola cifra ... dato che usi la lunghezza della stringa, questo puo' essere tra 1 e 3 cifre ... giusto?
aaa
08/06/09 0:05
Lawliet
scanf("%99s", &frase); <--- una piccola nota... sicuro che bisogna usare indirizzo per un array?
Ultima modifica effettuata da Lawliet 08/06/09 0:05
aaa
08/06/09 10:00
gigisoft
se non mi sbaglio esiste una funzione substr che permette di estrarre una sottostringa da una stringa, potrebbe fare al caso tuo.

Ciao. :k:

Luigi
aaa
08/06/09 12:14
theprogrammer
Postato originariamente da gigisoft:

... funzione substr ...


In C ... ?

Mi sa che fai confusione con qualche altro linguaggio/libreria ...
aaa
08/06/09 12:39
gigisoft
Postato originariamente da theprogrammer:

In C ... ?

Mi sa che fai confusione con qualche altro linguaggio/libreria ...


D'oh!!!

Si hai ragione ( + o - )
in realta' substr e' una funzione della classe string ( in C++ quindi, non in C )
in C non so... :d
aaa
08/06/09 14:29
in ctype.h si trovano le varie funzioni
-isdigit
-isalpha
-isalphanum

e altre di minore importanza.

se vuoi fare una cosa semplice potresti fare una cosa del genere:

if(isalpha(carattere))
    tua_stringa[indice] = carattere;


cosi elimini i numeri all'inizio e alla fine, ma anche quelli in mezzo, quindi hai la limitazione di poter criptare solo caratteri alfabetici
08/06/09 14:51
VoV
Un attimo ... il valore che inserisci prima e dopo, non e' detto che sia di una sola cifra ... dato che usi la lunghezza della stringa, questo puo' essere tra 1 e 3 cifre ... giusto?
si è vero, non ci avevo pensato...per questo ho risolto facilmente mettendo delle limitazioni
if (j > 11){
           while(frase[pos]!='
Un attimo ... il valore che inserisci prima e dopo, non e' detto che sia di una sola cifra ... dato che usi la lunghezza della stringa, questo puo' essere tra 1 e 3 cifre ... giusto?
si è vero, non ci avevo pensato...per questo ho risolto facilmente mettendo delle limitazioni
if (j > 11){
           while(frase[pos]!='{parsed_message}' && (pos < j)){
             frase[pos] -= (j - 4);
             pos++;}
se invece è minore di 11
if (j <= 11){
                  while(frase[pos]!='{parsed_message}' && (pos < j)){
                  frase[pos] -= (j - 2);
                  pos++;
                  }


@ingMark ci avevo pensato anche io però il problema sarebbe appunto l'input di stringhe contenenti numeri, anche per il fatto che spostando le lettere di N posizioni può capitare che una lettera venga sostituita con un numero che se successivamente viene eliminato rende impossibile decriptare la stringa

nessuno sa esattamente come funzioni strtok()? ho cercato su google e non ho trovato quasi nulla :( ' && (pos < j)){ frase[pos] -= (j - 4); pos++;}
se invece è minore di 11
if (j <= 11){
                  while(frase[pos]!='
Un attimo ... il valore che inserisci prima e dopo, non e' detto che sia di una sola cifra ... dato che usi la lunghezza della stringa, questo puo' essere tra 1 e 3 cifre ... giusto?
si è vero, non ci avevo pensato...per questo ho risolto facilmente mettendo delle limitazioni
if (j > 11){
           while(frase[pos]!='{parsed_message}' && (pos < j)){
             frase[pos] -= (j - 4);
             pos++;}
se invece è minore di 11
if (j <= 11){
                  while(frase[pos]!='{parsed_message}' && (pos < j)){
                  frase[pos] -= (j - 2);
                  pos++;
                  }


@ingMark ci avevo pensato anche io però il problema sarebbe appunto l'input di stringhe contenenti numeri, anche per il fatto che spostando le lettere di N posizioni può capitare che una lettera venga sostituita con un numero che se successivamente viene eliminato rende impossibile decriptare la stringa

nessuno sa esattamente come funzioni strtok()? ho cercato su google e non ho trovato quasi nulla :( ' && (pos < j)){ frase[pos] -= (j - 2); pos++; }


@ingMark ci avevo pensato anche io però il problema sarebbe appunto l'input di stringhe contenenti numeri, anche per il fatto che spostando le lettere di N posizioni può capitare che una lettera venga sostituita con un numero che se successivamente viene eliminato rende impossibile decriptare la stringa

nessuno sa esattamente come funzioni strtok()? ho cercato su google e non ho trovato quasi nulla :(
Ultima modifica effettuata da VoV 08/06/09 14:59
aaa