In realtà questo esercizio l'ho fatto per imparare meglio il C sotto consiglio di un amico, siccome gli Int e i Large Int hanno un massimo di capienza (dipende dalla macchina) ho creato un programma che riceve i dati di input come stringa e che poi li adatta per fare le somme, aggiungendo gli 0 se riscontra spazi, o altri caratteri non uguali a numeri (il tutto nella funzione migliora) , poi passa le stringhe ottenute nel programma "sommastringa" dove ogni carattere viene trasformato nel suo corrispondente "intero" e poi vengono sommati, e di conseguenza ritrasformati in carattere.
Se siete alla prima vista di un linguaggio nativo, o vedete cose che non sapete chiedete pure, però vorrei precisare una cosa, che quando ero nabbo aveva colpito anche a me, per gli interi faccio "- '0' " perchè quando fai il cast , ovvero trasformare un char in int , mettendo (int) all'inizio, il carattere , viene trasformato nel suo valore ASCII, e siccome se noi facciamo (int) '0' ci verrà come int 48, e noi abbiamo bisogno dello 0, basterà sottrare il nostro carattere a 48 oppure a '0' (ricordate che in C i caratteri vengono sempre messi tra gli apici unici, ovvero ' e non tra i doppi apici, quelli si usano per le stringhe).
Detto ciò, eccovi il source:
CODICE
#include <stdio.h>
#include <malloc.h>
#include <string.h>
char* sommastringa(char* , char* , int);
char* migliora(char* , int);
char* migliora(char *arr , int c){
char *res = (char*) malloc(sizeof(char) * c);
int i, a = 0;
for(i = 0 ; i < c ; i++){
if(arr[i] < '0' || arr[i] > '9'){
res[a] = '0';
a++;
}
}
for(i = 0; i < c ; i++){
if(arr[i] > '0' && arr[i] < '9'){
res[a] = arr[i];
a++;
}
}
return res;
}
char* sommastringa(char *a , char *b , int c){
char *res = (char*) malloc(sizeof(char) * c);
int i , q , w , e , tot;
for(i = c - 1 ; i >= 0 ; i--){
q = (int) a[i] - '0';
w = (int) b[i] - '0';
e = (int) res[i] == '1' ? 1 : 0;
tot = q + w + e;
if(tot > 9){
res[i] = (char) tot - 10 + '0';
res[i - 1 ] = '1';
} else {
res[i] = (char) tot + '0';
}
}
return res ;
}
main(){
int c;
printf("Dimensione massime del numero: ");
scanf("%d" , &c);
char *a = (char*) malloc(sizeof(char) * c );
char *b = (char*) malloc(sizeof(char) * c );
printf("Inserire il primo numero: ");
scanf("%s" , a);
printf("Inserire il secondo numero: ");
scanf("%s" , b);
char *f = migliora(a , c);
char *g = migliora(b , c);
char *h = sommastringa(f , g , c);
int i;
printf("%s", h);
free(h);
free(g);
free(f) ;
free(a) ;
free(b) ;
}
L'unica cosa che non mi piace del mio codice è che uso troppi puntatori, forse potevo evitare di crearne così tanti... ma vabbe asd buon divertimento