Sono ancora nuovo nel forum, quindi mi scuso in anticipo per il forum - problemi di etichetta.Differenze tra int/char array/stringhe
Non riesco a capire le differenze tra gli array int
e gli array char
.
Ho recentemente scritto un programma per un problema di Project Euler che originariamente utilizzava una matrice char
per memorizzare una stringa di numeri e in seguito chiamato caratteri specifici e provato a utilizzare le operazioni int
per trovare un prodotto. Quando ho usato una stringa di caratteri, ho ottenuto un prodotto ridicolmente grande, chiaramente errato. Anche se ho convertito quello che pensavo sarebbe stato compilato come un personaggio (str[n]
) in un numero intero in linea ((int)str[n]
), ha fatto esattamente la stessa cosa. Solo quando ho effettivamente utilizzato un array intero ha funzionato.
codice è il seguente
per la stringa di char
char str[21] = "73167176531330624919";
Ciò non ha funzionato. Ho ottenuto una risposta di circa 1.5 trilioni di dollari per una risposta che avrebbe dovuto essere di circa 40k.
per la int
serie
int str[] = {7,3,1,6,7,1,7,6,5,3,1,3,3,0,6,2,4,9,1,9};
Questo è ciò che ha fatto il lavoro. Ho eliminato anche il casting in-line.
Ogni spiegazione sul motivo per cui queste cose funzionavano/non ha funzionato e tutto ciò che può portare ad una migliore comprensione di queste idee sarà apprezzato. Link a cose utili sono pure. Ho fatto ricerche su stringhe, array e puntatori molto da solo (sono autodidatta mentre sono al liceo) ma i concetti sono ancora confusi.
domanda laterale, sono stringhe in C memorizzato automaticamente come array o è solo possibile farlo?
Forse [questa tabella] (http://www.asciitable.com) potrebbe far luce sul trattamento dei caratteri ascii come valori di "int". E sì, se per 'array' si intende una memoria contigua contenente i dati di carattere sottostanti, essi vengono memorizzati come tali (con un terminatore 0 implicito attaccato su). – WhozCraig
la tabella dice che char '0' corrisponde ad un valore int di 48? – Charles
Sì, anche se il valore è senza segno, che non può sembrare importante, ma sarà così se avete bisogno per gestire i caratteri ASCII estesi (vedere la tabella immediatamente inferiore a quella uno). Sei sulla strada giusta. Diverse risposte di seguito descrivono meglio questo. Si noti inoltre che questo ('0' == 48) è vero solo per ASCII. Esistono altri set di caratteri dipendenti dal sistema (come [EBCDIC] (http://en.wikipedia.org/wiki/EBCDIC)). – WhozCraig