| prof. Nunzio Brugaletta |
C++:
programmazione e oggetti |
Il seguente programma acquisisce una stringa e un carattere e restituisce le ricorrenze del carattere all'interno della stringa:
#include <iostream>
#include <string> /*1*/
using namespace std;
int main()
{
string dove; /*2*/
char cosa;
int i,volte,pos;
bool continua;
// input stringa in cui cercare e carattere da cercare
cout << "Cerca un carattere in una stringa\n"
"e ne mostra le ricorrenze";
cout << "\n\nStringa di ricerca\n\n";
cin >> dove; /*3*/
cout << "\nCosa cercare? ";
cin >> cosa;
// inizializzazione contatore ricorrenze,
// posizione carattere trovato e controllo ciclo elaborazione
volte=0;
pos=-1;
continua = true; /*4*/
// continua elaborazione finche' trovata una ricorrenza del carattere
while(continua){
pos = dove.find(cosa,pos+1); /*5*/
if(pos==-1) /*6*/
continua = false; /*7*/
else
volte++;
}
cout << "\n\nil carattere " << cosa << " si presenta "
<< volte << " volte" << endl;
return 0;
}
Per poter dichiarare oggetti di tipo string, come in 2, è necessario includere la relativa libreria (1).
L'input di una stringa (3) viene effettuato come per le variabili di tipo elementare. Questo però va bene se nella stringa fornita in input non si inserisce il carattere Spazio. In questo caso infatti, come notato in precedenza, le due parti della stringa ai lati dello Spazio verrebbero percepiti come due input diversi. Anche l'assegnazione ad una stringa viene effettuata per mezzo del solito operatore =, è solo necessario racchiudere la stringa fra doppi apici (dove = “stringa di prova”;). Anche nelle operazioni di confronto fra stringhe si utilizzano i soliti operatori (<, <=, >, >=, ==, !=).
La variabile booleana continua, inizializzata in 4, controlla il ciclo successivo.
Il messaggio find, inviato in 5 alla stringa dove, comanda di cercare il primo parametro, immesso fra parentesi, a partire dalla posizione specificata come secondo parametro. Il risultato di questa ricerca viene fornito come valore intero che è conservato in pos. La posizione iniziale di ricerca è 0 (il primo carattere della stringa: pos è inizializzato a -1 e, come parametro, viene fornito pos+1). Le ricerche successive cominceranno dalla posizione successiva a quella trovata in precedenza.
Se non si trovano ulteriori ricorrenze, la funzione membro find associata a dove, fornisce il valore -1 (6) e l'elaborazione può terminare: la 7 fa in modo di rendere falsa la condizione di controllo del ciclo.
Il problema proposto poteva essere risolto pure utilizzando i metodi disponibili per un vettore qualsiasi, ma l'uso di metodi specifici, come find, rende più semplice e più comprensibile il programma.
| http://ennebi.solira.org |
ennebi@solira.org |