Stringhe in C++: appunti di informatica

Appunti sull'uso delle stringhe nel linguaggio di programmazione C++ (4 pagine formato pdf)

Appunto di giorgio01
Stringhe In C++ uno degli utilizzi degli array ad una dimensione riguarda la conservazione in memoria di stringhe di caratteri: queste in C++ sono array di tipo carattere la cui fine è segnalata da un carattere null (carattere terminatore), indicato come '0'.
Il carattere null è il primo codice ASCII corrispondente al valore binario 00000000 e non ha niente a che vedere con il carattere 0 che ha, in ASCII, codice binario 00110000. char a[10]; dichiara un vettore costituito da un massimo di dieci caratteri e: char frase[] = "Oggi c'è il sole"; dichiara l'array monodimensionale frase il cui numero di caratteri è determinato dalla quantità di caratteri presenti fra doppi apici più uno (il carattere null che chiude la stringa). Quindi in un vettore di n elementi potremo memorizzare solo stringhe composte al massimo da n-1 caratteri, dato che l'ultimo deve essere riservato per il carattere di controllo 0'.
È importante notare la differenza tra le due assegnazioni: char a = 'r'; char b[] = "r"; Nel primo caso viene assegnato il solo carattere r, nel secondo la stringa r0. In definitiva: se si vuole fare riferimento ad un solo carattere, questo deve essere racchiuso fra apici singoli; se, invece, si vuole fare riferimento ad una stringa, occorre racchiuderla fra doppi apici. Per effettuare l'input della stringa basta specificare, come oggetto della destinazione del canale di input cin, il nome del vettore: char nome[10]; cin nome; In questo caso però la stringa digitata in input non può contenere spazi. Il carattere spazio viene, infatti, interpretato come separatore e quindi l'input è terminato. Per accettare una stringa in cui è presente il carattere spazio è necessario usare il metodo cin.get: char nome[30]; cin.get(nome,30n; In questo caso sono accettati un massimo di 29 caratteri (29 caratteri letti dal canale di input + 1 terminatore di stringa, cioè 0). In questo modo si possono limitare i caratteri acquisiti al numero previsto nella dichiarazione. Se ci sono un numero inferiore di caratteri, il parametro n della cin.get garantisce la lettura di tutti i caratteri fino al carattere invio. Occorre tenere presente che questo modo di comportarsi, può generare qualche effetto collaterale di cui bisogna tener conto: 1. La stringa introdotta da input potrebbe essere più lunga dei 30 (nell'esempio esaminato) previsti. In tal caso resterebbero nel buffer di input alcuni caratteri residui che andrebbero a finire nel prossimo input. Alla prossima istruzione di input il programma non si fermerebbe in attesa, trovandosi già nel buffer l'input previsto 2. Il carattere di n, introdotto per chiudere l'input, viene lasciato nel buffer di tastiera. Anche in questo caso il prossimo input sarebbe saltato Per evitare gli inconvenienti prima citati basta, dopo aver effettuato l'input, procedere allo svuotamento del buffer. In tal modo il prossimo input può essere effettuato nella maniera attesa. char nome[30], c_estratto; cin.get(nome, 30, n; do la funzione cin.get()