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);
}