Int to text

di il
9 risposte

Int to text

Per un programma ho bisogno di convertire da 1234 a "1234"
non sapprei di preciso da dove cominciare

E vorrei sapere come sommare 2 numeri senza sommarli esempio 2 + 2 -> 22

9 Risposte

  • Re: Int to text

    In C devi usare le funzioni di trattamento delle stringhe, vedi la sprintf (magari nella versione sicura ma non è importante ai fini di un esercizio).
  • Re: Int to text

    davidetecnik ha scritto:


    Per un programma ho bisogno di convertire da 1234 a "1234"
    non sapprei di preciso da dove cominciare

    E vorrei sapere come sommare 2 numeri senza sommarli esempio 2 + 2 -> 22
    In alternativa puoi costruirti una funzione che realizza il tuo scopo desiderato, utilizzando un po' matematica. Scusa l'implementazione grezza, ma vado di fretta. Non ci ho pensato più di tanto...
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int power(int base, int esponente);
    void integerToString(int number, char *);
    
    int number;
    
    int main(int argc, char *argv[])
    {
        printf("Inserire un numero: ");
        scanf("%d",&number);
        int dim = round(log10(number))+1;
        char stringa[dim];
        integerToString(number, stringa);
        printf("Numero = %d, convertito in stringa = %s",number, stringa);
        return 0;
    }
    
    int power(int base, int esponente)
    {
        if(esponente == 0)
        {
            return 1;
        }
    
    
    
        return base*power(base, esponente-1);
    }
    
    void integerToString(int number, char * stringa)
    {
    
        int numberTemp;
        int charNumber;
    
        int dimensione = round(log10(number));
    
        int d = power(10, dimensione);
    
        int i;
        int pos = 0;
        int n = dimensione;
    
        for(i=dimensione; i>=0;i--)
        {
    
            if(pos==0)
            {
                stringa[pos] = (number / power(10,dimensione)) + '0';
    
            }
            else if (n > 1)
            {
    
                numberTemp = number % power(10,n);
    
                charNumber = (numberTemp /power(10, n-1)) ;
    
                stringa[pos] = charNumber + '0';
    
            }
            else
            {
                charNumber = numberTemp % power(10,n);
    
                stringa[pos] = charNumber + '0';
            }
            n = dimensione - pos;
            pos++;
    
        }
    
        stringa[pos] = '\0';
    
        return stringa;
    }
    
    
    Il codice è ceertamente da ripulire e ottimizzabile. Spero di esserti stato di aiuto.
  • Re: Int to text

    Per quanto riguarda la prima richiesta io resterei sul semplice:
    #include <stdio.h>
    
    int main()
    {
        int n;
        char c;
        char str[20];
        unsigned int i = 0;
        printf(" NUMERO: ");
        scanf("%d", &n);
        while(n)
        {
            str[i++] = n % 10 + '0';
            n /= 10;
        }
        str[i] = '\0';
        for(unsigned int j = 0; j < i / 2; ++j)
        {
            c = str[j];
            str[j] = str[i - j - 1];
            str[i - j - 1] = c;
        }
        printf("STRINGA: %s", str);
        return 0;
    }
    

    davidetecnik ha scritto:


    E vorrei sapere come sommare 2 numeri senza sommarli esempio 2 + 2 -> 22
    Spiega meglio quello che vuoi fare.
  • Re: Int to text

    Nippolo ha scritto:


    Per quanto riguarda la prima richiesta io resterei sul semplice:
    #include <stdio.h>
    
    int main()
    {
        int n;
        char c;
        char str[20];
        unsigned int i = 0;
        printf(" NUMERO: ");
        scanf("%d", &n);
        while(n)
        {
            str[i++] = n % 10 + '0';
            n /= 10;
        }
        str[i] = '\0';
        for(unsigned int j = 0; j < i / 2; ++j)
        {
            c = str[j];
            str[j] = str[i - j - 1];
            str[i - j - 1] = c;
        }
        printf("STRINGA: %s", str);
        return 0;
    }
    

    Ciao Nippolito, beh concettualmente abbiamo ragionato in modo simile. La bellezza della programmazione è proprio l'ampia possibilità di descrivere e risolvere un problema.

    Un saluto!

    davidetecnik ha scritto:


    E vorrei sapere come sommare 2 numeri senza sommarli esempio 2 + 2 -> 22
    Spiega meglio quello che vuoi fare.
  • Re: Int to text

    deckard ha scritto:


    Ciao Nippolito, beh concettualmente abbiamo ragionato in modo simile. La bellezza della programmazione è proprio l'ampia possibilità di descrivere e risolvere un problema.

    Un saluto!
    Sono d'accordo, volevo solo mostrare una soluzione che non richiedesse l'utilizzo della libreria math.

    Ciao!
  • Re: Int to text

    davidetecnik ha scritto:


    E vorrei sapere come sommare 2 numeri senza sommarli esempio 2 + 2 -> 22
    Spiega meglio quello che vuoi fare.[/quote][/quote]

    Riflettendo forse vuoi concatenare la rappresentazione "testuale" di una serie di numeri...
    Allora potresti fare così...
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdarg.h>
    char* concatInteger(int n, ...);
    int void main(int argc, char *argv[])
    {
    	char *s;
       	s = concatInteger(4,2,3,4,5);
        	printf("%s\n",s);
        	free(s);
    }
    char* concatInteger(int n, ...)
    {
    	char *str;
       	str = malloc((n*sizeof(char))+1);
        	va_list ap;
        	va_start(ap, n);
        	
        	int i;
        	
        	for (i = 0 ; i < n ; i++) {
            	str[i] = va_arg( ap , int ) + '0'; 
            }
      	str[i] = '\0';
      	va_end(ap);
      	return str;
    
    }
    
    
    Facci sapere se è quello di cui avevi bisogno. Per semplicità, ho utilizzato una funzione con parametri variabili…

    Un saluto
  • Re: Int to text

    Nippolo ha scritto:


    deckard ha scritto:


    Ciao Nippolito, beh concettualmente abbiamo ragionato in modo simile. La bellezza della programmazione è proprio l'ampia possibilità di descrivere e risolvere un problema.

    Un saluto!
    Sono d'accordo, volevo solo mostrare una soluzione che non richiedesse l'utilizzo della libreria math.

    Ciao!
    A onore del vero la tua soluzione è più elegante! Complimenti e ben trovato Nippolo!

  • Re: Int to text

    Grazie per le risposte di tutti
    prendero in esame i vostri consigli
  • Re: Int to text

    davidetecnik ha scritto:


    Grazie per le risposte di tutti
    prendero in esame i vostri consigli
    Prego!
Devi accedere o registrarti per scrivere nel forum
9 risposte