PDA

View Full Version : [C++] Aiuto per comandi base c++


Vandir
10-04-2010, 18:54
Salve a tutti, sono uno studente che si cimenta con del c++ base per la scuola, e avrei bisogno di aiuto per una cosa:
ho un programma in cui chiedo di inserire in input n righe di max 80 cifre che andranno lette singolarmente (quindi 0991 sarà letto come "0" "9" "9" "1") per essere inserite in diversi vettori, ma non so come fare a capire quando finisce la riga per poter chiudere il vettore relativo :)
Qualche anima buona potrebbe scrivere (o ancora meglio indicare un sito in cui trovare) i comandi necessari?
Grazie mille :D

cionci
10-04-2010, 20:22
Per chiudere le stringhe devi usare il carattere '\0'.

fero86
11-04-2010, 00:41
Salve a tutti, sono uno studente che si cimenta con del c++ base per la scuola, e avrei bisogno di aiuto per una cosa:
ho un programma in cui chiedo di inserire in input n righe di max 80 cifre che andranno lette singolarmente (quindi 0991 sarà letto come "0" "9" "9" "1") per essere inserite in diversi vettori, ma non so come fare a capire quando finisce la riga per poter chiudere il vettore relativo :)
Qualche anima buona potrebbe scrivere (o ancora meglio indicare un sito in cui trovare) i comandi necessari?
Grazie mille :D
usa la funzione globale getline: http://www.cplusplus.com/reference/string/getline/

puoi usare la versione senza la specifica del delimitatore.

esempio (non testato):

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
unsigned int cLines;
cin >> cLines;
vector<string> astr;
while (cLines--) {
string str;
getline(cin, str);
astr.push_back(str);
}
return 0;
}



PS: il limite degli 80 caratteri é un dato superfluo, in C++ puoi scrivere molto facilmente programmi sicuri che gestiscono input di dimensioni arbitrarie :p

cionci
11-04-2010, 10:49
Lui deve leggere un carattere alla volta a quanto sembra ;)
In effetti anche io avevo letto male.. Per capire quando si chiude la riga...dipende un po' da cosa usi per fare la lettura carattere per carattere.

Vandir
11-04-2010, 11:23
Lui deve leggere un carattere alla volta a quanto sembra ;)
In effetti anche io avevo letto male.. Per capire quando si chiude la riga...dipende un po' da cosa usi per fare la lettura carattere per carattere.
Scusate forse mi sono spiegato male :)
Io ho un file txt in input di cui è specificato il numero n di righe da leggere ma non conosco il numero di caratteri da leggere per ciascuna riga, e volevo salvare ciascuna cifra in una matrice di tipo "cifra[i][j]", in cui "i" indica la riga di appartenenza e "j" la posizione della cifra nella sequenza, ma non so come fare a capire quante cifre sono presenti in ciascuna riga :)
Non avevo mai fatto un programma in cui non conoscevo il numero di dati in input, quindi mi servirebbe il modo di capire quando termina una riga di caratteri così da poter catalogare ciascuna cifra nella posizione giusta nella matrice
Mi potete illuminare? Grazie mille :D

cionci
11-04-2010, 11:34
Ma sei obbligato a leggere un carattere alla volta o puoi leggere tutta la riga ?
Quale istruzioni usi per la lettura ?

Vandir
11-04-2010, 13:09
Ma sei obbligato a leggere un carattere alla volta o puoi leggere tutta la riga ?
Quale istruzioni usi per la lettura ?

Posso leggere come mi pare, però bisogna tenere conto che non posso leggere le n righe come numeri dato che se c'è uno 0 all'inizio della riga non penso che verrebbe registrato...
Per la lettura uso istruzioni del genere:
#include <fstream>

ifstream it;
it.open("input.txt");
it >> n;
for (int i=0; i<n; i++)
it >> num[i];
it.close();

cionci
11-04-2010, 16:28
Allora leggi con getline, come ti aveva suggerito fero86 ;)
Leggi una riga alla volta e la metti una string. Da lì in poi puoi usare qualsiasi metodo per convertire la stringa in numeri.

Vandir
11-04-2010, 20:35
Allora leggi con getline, come ti aveva suggerito fero86 ;)
Leggi una riga alla volta e la metti una string. Da lì in poi puoi usare qualsiasi metodo per convertire la stringa in numeri.

Grazie mille appena posso proverò (adesso mi sto preparando per una verifica di biologia) :D
Comunque grazie mille :)

Vandir
12-04-2010, 17:38
Ho visto la funzione getline, ma non so se è quello che mi serve...
Da quello che ho capito ti salva una riga in una stringa, ma mi servirebbe anche capire quanto è lunga la stringa, poichè dopo dovrei andare ad esaminare i caratteri uno a uno e non ho idea di come fermarmi quando raggiungo la fine della stringa (non lavoro molto con le stringhe quindi non so come funzionino :D)
Grazie :)

cionci
12-04-2010, 17:59
Bastano i metodi size e lenght: http://www.cplusplus.com/reference/string/string/

Vandir
12-04-2010, 18:23
Giusto, grazie mille siete stati utilissimi :D

Vandir
13-04-2010, 14:34
Ho ancora un piccolo problema: provo ad usare la libreria string ma quando provo a creare una variabile globale di tipo string mi dice che non è dichiarato il tipo di variabile...
Possibile che manchi la libreria delle string? Come dev uso "wxDev-c++", posso rimediare scaricando da qualche parte la libreria o faccio prima a scaricare un altro dev?

tomminno
13-04-2010, 14:40
Non è che ti manca:

#include <string>

?

Vandir
13-04-2010, 16:07
No no, l'ho provato a scuola e me lo compila senza problemi, se lo compilo a casa mi da quest'errore...
P.S. ho risolto mettendo la variabile come char invece che come string, adesso provo a risolvere l'esercizio per vedere se va bene :D

Comunque mi servirebbe capire perchè non riesco ad usare le string...

EDIT: adesso che ci penso mi sa che già a scuola avevo messo char, quindi non sono sicuro che non sia un errore dell'esercizio, ma non capisco cosa possa essere...

Vandir
13-04-2010, 18:09
Scusate ragazzi se faccio un up ma domani ho una gara regionale, e visto che non ho quasi mai usato le stringhe mi servirebbe capire perchè non riesco ad usarle :)
Io le includo, ma quando creo una variabile string mi dà errore nella compilazione...
Oppure qualche anima buona potrebbe dirmi come fare a contare i caratteri di una stringa di caratteri salvata come char (char[i])?

EDIT: facendo qualche esperimento mi è venuto un dubbio: non è che ho bisogno di "using namespace std" per far andare le stringhe?

fero86
13-04-2010, 18:27
per chiarezza, posta i sorgenti e dicci la riga a cui da' il primo errore di compilazione, nonché l'errore che da'.
il sorgente che ti ho scritto io al post #3 comunque non ti puó essere utile? hai provato a compilarlo?

tomminno
13-04-2010, 18:36
Scusate ragazzi se faccio un up ma domani ho una gara regionale, e visto che non ho quasi mai usato le stringhe mi servirebbe capire perchè non riesco ad usarle :)
Io le includo, ma quando creo una variabile string mi dà errore nella compilazione...
Oppure qualche anima buona potrebbe dirmi come fare a contare i caratteri di una stringa di caratteri salvata come char (char[i])?

EDIT: facendo qualche esperimento mi è venuto un dubbio: non è che ho bisogno di "using namespace std" per far andare le stringhe?

Eh beh se domani hai una gara e non sai queste cose basilari sei messo bene!
Forse era il caso di studiare un pochino per tempo.

Non hai mai postato il tuo codice, è difficile tirare ad indovinare cosa potresti aver sbagliato, non ti pare?

Eppure ti erano stati riportati degli esempi completi, con tanto di include e using.

Vandir
13-04-2010, 18:54
Eh beh se domani hai una gara e non sai queste cose basilari sei messo bene!
Forse era il caso di studiare un pochino per tempo.

Non hai mai postato il tuo codice, è difficile tirare ad indovinare cosa potresti aver sbagliato, non ti pare?

Eppure ti erano stati riportati degli esempi completi, con tanto di include e using.
Ho trovato solo domenica questo esercizio con le stringhe, che in c++ non avevo mai usato (nelle gare che faccio io non ci sono mai state)...
Comunque era solo quello il problema, bisognava aggiungere using, adesso fila liscio, grazie mille :D