Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Conversione
Forum - C/C++ - Conversione

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
pocho183 (Normal User)
Rookie


Messaggi: 30
Iscritto: 22/02/2013

Segnala al moderatore
Postato alle 21:58
Martedì, 03/06/2014
salve a tutti,

Vorrei fare una conversione di array di interi in array di stringhe,(decimale) tipo:
int a {120,23,240}
char string []
ecc.
Ho visto la conversione itoa, però non riesco a fare conversione di array, mi converte
un solo valore, potreste aiutarmi ?

PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 22:01
Martedì, 03/06/2014
Ciao!

Implementa un ciclo che esamina tutti gli elementi del vettore.
In che modo intendi formattare la stringa con il risultato ?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:19
Martedì, 03/06/2014
Io farei così, o qualcosa di simile:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define kNEl    3
  5.  
  6. int main() {
  7.     int i, a[kNEl] = { 120, 23, 240 };
  8.     char s[kNEl][12];
  9.  
  10.     for( i=0; i<kNEl; i++ )
  11.         sprintf( s[i], "%d", a[i] );
  12.  
  13.  /* ora nell'array s[] c'e' una rappresentazione in
  14.     formato stringa di ciascuno dei valori presenti
  15.     in a[]: che ci vogliamo fare? */
  16.    
  17.     return 0;
  18. }


PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:29
Martedì, 03/06/2014
Stando a quello che dice Marco, potrebbe essere che intendevi un'altra cosa, ovvero una sola stringa contenente tutti i valori divisi da un qualche carattere separatore. Ipotizzando di voler utilizzare la virgola come separatore e il carattere di "a capo" come terminatore della sequenza, a me è venuta in mente una soluzione tipo questa:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define kNEl    3
  5.  
  6. int main() {
  7.     int i, a[kNEl] = { 120, 23, 240 };
  8.     char s[12*kNEl];
  9.     char *ptr = s;
  10.     char sep[] = { ',', '\n' };
  11.  
  12.     for( i=0; i<kNEl; i++ )
  13.         ptr += sprintf( ptr, "%d%c", a[i], sep[i==(kNEl-1)] );
  14.  
  15.  /* ora s[] contiene un'unica stringa C nel formato d'una
  16.     sequenza di sottostringhe separate da virgole e terminata
  17.     da un carattere 'new line'; ogni sottostringa rappresenta
  18.     uno dei valori dell'array a[] */
  19.  
  20.     printf( "\n %s\n", s );
  21.  
  22.     return 0;
  23. }


Ultima modifica effettuata da il 03/06/2014 alle 22:34
PM Quote
Avatar
pocho183 (Normal User)
Rookie


Messaggi: 30
Iscritto: 22/02/2013

Segnala al moderatore
Postato alle 12:22
Mercoledì, 04/06/2014
questo modo è corretto ?

Codice sorgente - presumibilmente C++

  1. int i,lunghezza=3;
  2. int valori_interi[lunghezza]={120,43,253};
  3. char array_string[lunghezza][12];
  4.  
  5.  
  6. int main () {
  7. .
  8. .
  9. Convert(valori_interi,lunghezza);
  10. .
  11. .
  12. }
  13.  
  14. void Convert(unsigned int *array_interi,int len) {
  15.         for(i=0;i<len;i++){
  16.                 sprintf(array_string[i],"%d",array_interi[i]);
  17.         }
  18. }



Vorrei chiedere dei chiarimenti
su questa riga:
char array_string[len][12]; (perché proprio 12)

E sprintf è solo una conversione non stampa a schermo nulla
(a me serve che non stampi nulla., cioè carichi solo i valori
nella stringa convertita)?

Ultima modifica effettuata da pocho183 il 04/06/2014 alle 12:32
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:50
Mercoledì, 04/06/2014
Prima di leggere le mie risposte, vorrei che tenessi presente quel che c'è nella "firma" d'ogni mio messaggio: "Ma cosa vuoi che ne sappia? Io ci gioco, col codice, mica ci lavoro!". Giusto per mettere le mani avanti. Detto questo...

Chiedi: "char array_string[len][12]; (perché proprio 12)"

Perché se converti valori contenuti in variabili di tipo int (che si solito sono 4 byte) puoi avere come valore massimo due miliardi e rotti in positivo o in negativo. In positivo, si tratta di un massimo di 10 cifre, in negativo, dieci cifre più il segno meno. L'eventuale segno, più dieci cifre, più il terminatore '\0' fanno un massimo di dodici caratteri nella stringa.

Chiedi: "sprintf è solo una conversione non stampa a schermo nulla?"

La funzione sprintf() è identica alla funzione printf(), ma immette il suo output in un array di caratteri passato come primo parametro anziché inviarlo alla console stdout. Quindi sì, è solo una conversione e non stampa a schermo nulla.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 15:14
Mercoledì, 04/06/2014
A me sembra che nel tuo codice ci si siano diverse cose che non vanno.

1. Non è ammesso l'uso di una variabile per definire le dimensioni di un array. Usa una costante:

Codice sorgente - presumibilmente C++

  1. #define kLunghezza      3
  2.  
  3. int i;
  4. int valori_interi[kLunghezza] = { 120, 43, 253 };
  5. char array_string[kLunghezza][12];



(potresti anche allocare l'array dinamicamente, nel qual caso potresti usare una variabile, ma sarebbe un po' più complicato)

2. Non ha molto senso usare una variabile globale per un contatore come i. Io avrei "confinato" i nello scopo della funzione che lo usa:

Codice sorgente - presumibilmente C++

  1. int valori_interi[kLunghezza] = { 120, 43, 253 };
  2. char array_string[kLunghezza][12];
  3.  
  4. /* [...] */
  5.  
  6. void Convert( unsigned int *array_interi, int len ) {
  7.     int i;
  8.    
  9.     for( i=0; i<len; i++) {
  10.         sprintf( array_string[i], "%d", array_interi[i] );
  11.     }
  12. }



3. Usi la funzione Convert() prima di averla definita o dichiarata. O sposti il corpo della funzione Convert() definendola prima di main(), o la dichiari prima di main() pur non spostandone la definizione:

Codice sorgente - presumibilmente C++

  1. #define kLunghezza 3
  2.  
  3. int valori_interi[kLunghezza] = { 120, 43, 253 };
  4. char array_string[kLunghezza][12];
  5.  
  6. void Convert( unsigned int *array_interi, int len );
  7.  
  8. int main () {
  9.     Convert( valori_interi, kLunghezza );
  10. }
  11.  
  12. void Convert( unsigned int *array_interi, int len ) {
  13.     int i;
  14.    
  15.     for( i=0; i<len; i++) {
  16.         sprintf( array_string[i], "%d", array_interi[i] );
  17.     }
  18. }



4. Non puoi passare un puntatore ad un array di tipo int ad una funzione che ne richiede uno di tipo unsigned int. Devi far collimare i due tipi:

Codice sorgente - presumibilmente C++

  1. int valori_interi[kLunghezza] = { 120, 43, 253 };
  2.  
  3. void Convert( int *array_interi, int len );



5. La funzione main() deve restituire un valore di ritorno di tipo int (zero se non si verificano errori).

Alla fine della fiera, il codice revisionato potrebbe essere una cosa del genere:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define kLunghezza 3
  5.  
  6. int valori_interi[kLunghezza] = { 120, 43, 253 };
  7. char array_string[kLunghezza][12];
  8.  
  9. void Convert( int *array_interi, int len );
  10.  
  11. int main () {
  12.     Convert( valori_interi, kLunghezza );
  13.     return 0;
  14. }
  15.  
  16. void Convert( int *array_interi, int len ) {
  17.     int i;
  18.  
  19.     for( i=0; i<len; i++) {
  20.         sprintf( array_string[i], "%d", array_interi[i] );
  21.     }
  22. }



Ultima modifica effettuata da il 04/06/2014 alle 15:20
PM Quote
Avatar
pocho183 (Normal User)
Rookie


Messaggi: 30
Iscritto: 22/02/2013

Segnala al moderatore
Postato alle 16:25
Mercoledì, 04/06/2014
Grazie, sei fortissimo!

Mi da un errore:
dice che un argomento char* è incompatibile con uno unsigned char.
presumo che il char* sia di sprintf e unsigned char sia il char della dichiarazione,
come risolvere?

Ultima modifica effettuata da pocho183 il 04/06/2014 alle 17:28
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:39
Mercoledì, 04/06/2014
Ma sai che non vedo nessun unsigned char in giro nel codice che stiamo discutendo? Mi dici in che riga il compilatore ti segnala l'errore? Io non lo trovo, e Code::Blocks compila tutto senza battere ciglio (magari è più "di bocca buona", chissà).

Ah, e grazie per i complimenti! Per chi fa le cose per hobby sono sempre una gran soddisfazione. Ora mi "gaserò" ben bene (così poi mi bannano, o qualche guru mi sbatte in "ciaffo zone"* e non se ne parla più).

La "ciaffo zone" è questa, per capirsi: http://www.pierotofy.it/pages/extras/forum/671/

Ultima modifica effettuata da il 04/06/2014 alle 17:41
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo