x893
24-02-2015, 10:31
Salve ragazzi, vi spiego il mio problema:
sto scrivendo una funzione che converta dei numeri in input da formato string in int, questi numeri a coppie rappresentano una base e un valore. La funzione deve convertire tutti i valori indicati dalla base fornita in input alla base 10. In buona sostanza il vettore da restituire sarà composto dalla metà degli elementi, che rappresentano la conversione dei valori delle coppie in entrata.
La funzione è già tutta scritta e lavora come dovrebbe.. L'unico problema è che quando vado a visualizzare i puntatori in cui vado a conservare i miei valori oltre ai risultati aspettati mi ritrovo anche altri valori che non so prorpio da dove vengano.. Io suppongo ci sia un problema con l'allocazione della memoria, ma non riesco a venirne a capo..
Allego il codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void stampa(int *lista){
int i;
for (i=0; lista[i] != '\0'; i++)
printf(" %i -",lista[i]);
printf("\n");
}
int conta_elementi(int *lista){
int j = 0,i = 0;
while (lista[i] != '\0'){
j += 1;
i++;
}
return j;
}
int cambio_base(int num, int base){
int r = 0,tmp,molt = 1;
while (num > 0){
tmp = num % 10;
r += tmp*molt;
molt *= base;
num /= 10;
}
return r;
}
char *inverti(char *val){
int i,j = 0;
i = strlen(val)-1;
char *val1 = (char*)malloc(sizeof(val));
for (; i > -1; i--){
val1[j] = val[i];
j++;
}
return(val1);
}
int *stoi(char *val){
int i = 0,tmp,m = 1,r = 0,j = 0,k;
int *conv = (int*)malloc((sizeof(val)/sizeof(char)));
while (val[i] != '\0'){
while (val[i] != ' ' && val[i] != '\0'){
tmp = val[i] - '0';
tmp *= m;
r += tmp;
m *= 10;
i++;
}
conv[j] = r;
r = tmp = 0;
m = 1;
j++;
i++;
}
stampa(conv);
return(conv);
}
int eval(char *val){
int i,tmp,j=0;
char *val1 = inverti(val);
int *conv = stoi(val1);
int *numeri = (int*)malloc((sizeof(val)/sizeof(char))/2);
for (i=0; conv[i] != '\0'; i+=2){
numeri[j] = cambio_base(conv[i],conv[i+1]);
j++;
}
stampa(numeri);
}
int main(){
char *string = "2 101 3 2 8 101";
eval(string);
}
sto scrivendo una funzione che converta dei numeri in input da formato string in int, questi numeri a coppie rappresentano una base e un valore. La funzione deve convertire tutti i valori indicati dalla base fornita in input alla base 10. In buona sostanza il vettore da restituire sarà composto dalla metà degli elementi, che rappresentano la conversione dei valori delle coppie in entrata.
La funzione è già tutta scritta e lavora come dovrebbe.. L'unico problema è che quando vado a visualizzare i puntatori in cui vado a conservare i miei valori oltre ai risultati aspettati mi ritrovo anche altri valori che non so prorpio da dove vengano.. Io suppongo ci sia un problema con l'allocazione della memoria, ma non riesco a venirne a capo..
Allego il codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void stampa(int *lista){
int i;
for (i=0; lista[i] != '\0'; i++)
printf(" %i -",lista[i]);
printf("\n");
}
int conta_elementi(int *lista){
int j = 0,i = 0;
while (lista[i] != '\0'){
j += 1;
i++;
}
return j;
}
int cambio_base(int num, int base){
int r = 0,tmp,molt = 1;
while (num > 0){
tmp = num % 10;
r += tmp*molt;
molt *= base;
num /= 10;
}
return r;
}
char *inverti(char *val){
int i,j = 0;
i = strlen(val)-1;
char *val1 = (char*)malloc(sizeof(val));
for (; i > -1; i--){
val1[j] = val[i];
j++;
}
return(val1);
}
int *stoi(char *val){
int i = 0,tmp,m = 1,r = 0,j = 0,k;
int *conv = (int*)malloc((sizeof(val)/sizeof(char)));
while (val[i] != '\0'){
while (val[i] != ' ' && val[i] != '\0'){
tmp = val[i] - '0';
tmp *= m;
r += tmp;
m *= 10;
i++;
}
conv[j] = r;
r = tmp = 0;
m = 1;
j++;
i++;
}
stampa(conv);
return(conv);
}
int eval(char *val){
int i,tmp,j=0;
char *val1 = inverti(val);
int *conv = stoi(val1);
int *numeri = (int*)malloc((sizeof(val)/sizeof(char))/2);
for (i=0; conv[i] != '\0'; i+=2){
numeri[j] = cambio_base(conv[i],conv[i+1]);
j++;
}
stampa(numeri);
}
int main(){
char *string = "2 101 3 2 8 101";
eval(string);
}