char* strchr (const char* s, char c)
char* strrchr (const char* s, char c) char* strstr (const char* s, const char* needle) char* strtok (char* s, const char* delimitatori) |
strchr
e strrchr
cercano la prima occorrenza del carattere c all'interno della stringa s e tornano un puntatore ad essa; la differenza tra di esse è che strchr
comincia la ricerca a partire dal primo carattere di s, strrchr
dall'ultimo. Entrambe tornano un puntatore nullo se il carattere non viene trovato.
// ex6_6_5 #include <iostream.h> #include <string.h> void main() { char* s = "stringa: `Manuale di programmazione in C++'"; cout << s << "\n"; cout << "ricerca di `e':\n"; cout << "da sx: " << strchr (s, 'e') << "\n"; cout << "da dx: " << strrchr(s, 'e') << "\n"; cout << "ricerca di `q': " << strchr(s, 'q') << "\n"; }
esempio di output:
stringa: `Manuale di programmazione in C++'
ricerca di `e':
da sx: e di programmazione in C++'
da dx: e in C++'
ricerca di `q': (null)
La funzione strstr
ha un funzionamento del tutto simile alle due funzioni appena illustrate, con la differenza che la chiave di ricerca è costituita non da un carattere, bensì dalla stringa needle:
// ex6_6_6 #include <iostream.h> #include <string.h> void main() { char s[50], needle[50]; cout << "stringa? "; cin >> s; cout << "needle ? "; cin >> needle; cout << "prima occorrenza: " << strstr (s, needle); }
esempio di output:
stringa? Ostrogradsky
needle ? rog
prima occorrenza: rogradsky
Ovviamente needle potrebbe essere costituito anche da un solo carattere, per cui strchr
è un caso particolare di strstr
.
Infine, la funzione strtok
(STRing TOKenize) serve a ridurre una stringa in token, cioè minime unità espressive; tale funzione è molto comoda per separare, ad esempio, le parole dalla punteggiatura all'interno di una frase; i segni da intepretare come punteggiatura sono quelli contenuti nella stringa delimitatori. Per effetturare delle ricerche multiple, basta richiamare la funzione strtok
, dando alla stringa s un puntatore nullo. Vediamo un semplice esempio:
// ex6_6_7 #include <iostream.h> #include <string.h> void main() { char s[200] = "La matematica e' come l'amore: \ne' fatta di" " semplici idee, \nche possono diventare - estremamente" " - complicate. \n(R. Drabek)\n\n"; cout << s; char delimitatori[10] = "\n:,-. ()"; char* parola = new char[20]; parola = strtok (s, delimitatori); while ( parola != 0 ) { cout << parola << "\n"; parola = strtok(0, delimitatori); } }
output:
La matematica e' come l'amore:
e' fatta di semplici idee,
che possono diventare - estremamente - complicate.
(R. Drabek)
La
matematica
e'
come
l'amore
e'
fatta
di
semplici
idee
che
possono
diventare
estremamente
complicate
R
Drabek
Purtroppo per questo esempio non siamo riusciti ad evitare di utilizzare l'operatore new, di cui parleremo nel prossimo capitolo; basti sapere che con lo statement char* parola = new char[20]
, riusciamo ad ottenere dello spazio in memoria per la stringa parola
.
string.h
presentate in questa sezione;