Problema riconversione da binario/decimale stringhe (c++)

di il
4 risposte

Problema riconversione da binario/decimale stringhe (c++)

Ciao a tutti

Sto scrivendo un programma il quale prendendo una stringa gli cambia lettere e le converte in binario..
Il problema sorge nella riconversione per visualizzare la frase iniziale, penso che sia un problema per la char, con int funzionava, vi prego aiutatemi , la parte di codice che crea problemi è void decimale, vi posto la sorgente..

#include <iostream>
#include <string.h>
#include <stdio.h>
#include<math.h>

using namespace std;

void alfabeto(char[]);
void binario (char[]);
void decimale (char[]);
void dormi ();

int pow(int value){
int ris = 1;
if(value >= 1)
for (int i = 1; i <= value; i++)
ris *= 2;
return ris;

}

int main()
{
char frase[101];
char scelta[2];
bool esci=false;
do{
cout << "\SCELTA!! :\nMEX>>CODIFICA '1'\nCODIFICA>>MEX '2': ";
cin.get(scelta,2,'\n');
while (cin.get()!='\n');

cout << "Inserire la frase da codificare: "; //FASE DI INPUT
cin.get(frase,101,'\n');
while(cin.get()!='\n');

if (scelta[0]=='1')
{
alfabeto (frase);
binario (frase);
cout << "\n";
}

else {
if (scelta[0]=='2')
{
decimale (frase);
//alfabeto (frase);
cout << "\n";
}else (esci=true);
}
}while (!esci);

system ("pause");
return 0;
}



void alfabeto(char frase[])
{
int k, carattere, resto;
{
for (k=0;k<strlen(frase);k++) //LETTERA PER LETTERA MODIFICO IL MESSAGGIO
{
carattere=frase[k];
if (carattere>='a'&&carattere<='z') //Trasformo in MAIUSCOLO
carattere=carattere-32;
if (carattere>='A'&&carattere<='Z') //Controllo che siano lettere
{
resto='M'-carattere;
frase[k]=77+resto+1;
}
else
if (carattere>='0'&&carattere<='9') //Controllo se sono numeri
{
resto=53-carattere;
frase[k]=53+resto-1;
}
else frase[k]=' ';
}
}
cout << frase<< "\n";
}

void binario(char frase[])
{
#define N 8
int i,v[N],k,n; // la i potresti definirla direttamente nei for
char f_frase[801];

k=0;

do{
n=frase[k];
//cout << " N: "<<n << "\n";
do
{
if (n%2==1)
v[N] = 1;
else
v[N] = 0;
}while(n != n%2==0);

for(i=0; i<N; i++)
{
if(n%2 == 1)
v=1;
else
v=0;
// nota: avrei potuto rimpiazzare queste quattro righe con v=n%2; (senza mettere l'if e l'else)

n=n/2;
}

for(i=N-1; i>=0; i--) // N, non n
cout << v;
k++;
}while(k<strlen(frase));
}

void decimale(char frase[])
{
char bin[801];
char dec = 0;
int j=0, c=1;
int a,b;

j=strlen(frase)/8+1;
cout << "j:" << j;
cout << "\n";

do{
b=8*c;
a=b-7;

for (int k=a;k<b;k++)
bin[k]=frase[k];

for (int i = 0; i < 8; i++)
{
if (bin == '1')
dec += pow(8 - i - 1);
cout << "\nDEC: "<< dec;
}
cout << "Valore decimale: "<<dec;

c++;
cout << "\nC:" << c;

}while (c!=j);
}

4 Risposte

Devi accedere o registrarti per scrivere nel forum
4 risposte