E' possibile in C++ creare un array di stringhe?
Del tipo:
array[] = {'str1', 'str2', 'str3', ... ,'strN'}
Col pascal basta scrivere
type vettore = array[1..5] of string;
...ma in C++?
Grazie in anticipo per l'aiuto
E' possibile in C++ creare un array di stringhe?
Del tipo:
array[] = {'str1', 'str2', 'str3', ... ,'strN'}
Col pascal basta scrivere
type vettore = array[1..5] of string;
...ma in C++?
Grazie in anticipo per l'aiuto
Se parliamo di char* così
però con C++ ci sarebbe anche la stringa del STL, che sia un po più facile da usare, mai come con Pascal .codice:char* strs[]={'str1', 'str2', 'str3', ... ,'strN'};
www.sitemeer.com » Quando un sito pare irraggiungibile
Se ti piace ci puoi trovare anche su Facebook
Quindi teoricamente potrei fare così?Originariamente inviato da neroux
Se parliamo di char* così
però con C++ ci sarebbe anche la stringa del STL, che sia un po più facile da usare, mai come con Pascal .codice:char* strs[]={'str1', 'str2', 'str3', ... ,'strN'};
codice:char* strs[N]; for (i = 1; i <= N; i++) { cout << "Inserire stringa"; cin >> strs[i]; }
Provalo - io farò un po fatica adesso senza C compiler
però con C - e normalmente gli altri linguaggi con la sintassi di C - l'indice inizia da 0, quindi
codice:for (i = 0; i < N; i++)
www.sitemeer.com » Quando un sito pare irraggiungibile
Se ti piace ci puoi trovare anche su Facebook
Giuro che questa la sapevo xD è la forza di abitudine al Pascal xDOriginariamente inviato da neroux
però con C - e normalmente gli altri linguaggi con la sintassi di C - l'indice inizia da 0, quindi
codice:for (i = 0; i < N; i++)
Cooooomunque... non va..
Senti, ti posto il listato di quella sottospecie di programma che vorrei fare, eccolo:
Questo è il listato con la modifica che mi hai detto tu; lo compila, ma appena inserisco il secondo valore dell'array temp[] l'esecuzione crasha.codice:#include <iostream> #include <string> #define N 2 //numero di valori degli arrays using namespace std; main(int argc, char argv[]){ int i; float temp[N], m = 0; char* city[N]; //array che dovrebbe contenere le stringhe //ciclo per il popolamento dei vettori for (i = 0; i <= N; i++) { cout << "Inserire citta'\n"; cin >> city[i]; cout << "Inserire temperatura\n"; cin >> temp[i]; m = m + temp[i]; //somma temperature } m = m/N; //calcolo media cout << "La temperatura media e': " << m; cin; }
Invece, come l'avevo fatto io (cambia solo che al posto di char* c'era string), l'esecuzione crashava quando inserivo il terzo valore dell'array city[].
Idee?
Ovvio che va in crash, cerchi di memorizzare dei caratteri in posti a caso in memoria (city è un vettore di puntatori non inizializzati)... Una possibilità è fare qualcosa del genere:
per cui crei un array di N stringhe da 200 caratteri ciascuna; a quel punto però io eviterei di usare cin >> city[i], dal momento che non controlla la lunghezza della stringa e può sforare dal buffer. Usa piuttosto il metodo getline.codice:char city[N][200];
Il metodo in assoluto più semplice però è l'uso della classe STL string:
Il crash che dicevi che avveniva in questo caso dipende dal fatto che hai impostato il ciclo in questa maniera:codice:std::string city[N];
, mentre deve esserecodice:for (i = 0; i <= N; i++)
, dal momento che l'ultimo elemento dei due array è N-1.codice:for (i = 0; i < N; i++)
In ogni caso prima di andare avanti consiglio a tutti e due di studiare approfonditamente come funzionano le stringhe C, dato che anche solo pensare che il codice
possa funzionare indica che non avete capito assolutamente come funzionano le stringhe C.codice:char* strs[N]; for (i = 1; i <= N; i++) { cout << "Inserire stringa"; cin >> strs[i]; }
Amaro C++, il gusto pieno dell'undefined behavior.
Ormai tanto tempo che non uso più Pascal, peccatoOriginariamente inviato da Whistler
Giuro che questa la sapevo xD è la forza di abitudine al Pascal xD
Il problema è che assegni i dati ad un char* senza aver allocato la memoria prima.Originariamente inviato da Whistler
lo compila, ma appena inserisco il secondo valore dell'array temp[] l'esecuzione crasha.
C'è ancora <= N, come l'indice inizia da zero deve essere <NOriginariamente inviato da Whistler
(cambia solo che al posto di char* c'era string), l'esecuzione crashava quando inserivo il terzo valore dell'array city[].
Idee?
www.sitemeer.com » Quando un sito pare irraggiungibile
Se ti piace ci puoi trovare anche su Facebook
MItaly, guarda, la mia era una simplice rischiesta d'aiuto, non c'è bisogno di mettersi al di sopra
("[...]dato che anche solo pensare che il codice possa funzionare indica che non avete capito assolutamente come funzionano le stringhe C."); alla fin fine io sto imparando, e credo mi siano ancora concessi errori del genere..
Cooomunque.. Molte grazie per l'aiuto ad entrambi, ora il programmino sembra funzionare
Ah, un'ultima cosa, per comparare due stringhe in C++ si fa sempre con a funzione strcmp() del C o in qualche altro modo? (magari direttamente :P)
Per le stringhe plain di C (che alla fine sono solo un array di caratteri e non proprio un tipo stringa) si fa con strcmp(). Per una stringa del STL ci sia anche il metodo compare().Originariamente inviato da Whistler
Ah, un'ultima cosa, per comparare due stringhe in C++ si fa sempre con a funzione strcmp() del C o in qualche altro modo? (magari direttamente :P)
www.sitemeer.com » Quando un sito pare irraggiungibile
Se ti piace ci puoi trovare anche su Facebook
Non mi sto mettendo sopra a nessuno, sto constatando che non si sono comprese né le stringhe C né i puntatori, visto che l'errore è madornale; di conseguenza consiglio di ristudiarle per bene prima di proseguire. In particolare, sconsiglio fortemente di utilizzare fin da subito le stringhe C++, perché in molti casi si devono comunque usare le stringhe C e se non le si è comprese a fondo si rischia di fare grossi pasticci.Originariamente inviato da Whistler
MItaly, guarda, la mia era una simplice rischiesta d'aiuto, non c'è bisogno di mettersi al di sopra
("[...]dato che anche solo pensare che il codice possa funzionare indica che non avete capito assolutamente come funzionano le stringhe C."); alla fin fine io sto imparando, e credo mi siano ancora concessi errori del genere..
Per le stringhe STL basta usare i normali operatori di confronto (==, !=, <, <=, >, >=), dal momento che la classe basic_string ne effettua l'overload.Ah, un'ultima cosa, per comparare due stringhe in C++ si fa sempre con a funzione strcmp() del C o in qualche altro modo? (magari direttamente :P)
Amaro C++, il gusto pieno dell'undefined behavior.