PROGRAMMIAMO
C++ - Funzioni di library
Funzioni di library per le stringhe

Il C++ contiene molte funzioni di library per la gestione delle stringhe di caratteri. Per poterle usare è necessario dichiarare in testa al file:

#include <string>

Vediamo qui di seguito le funzioni principali e come si usano.

 

STRLEN: calcola la lunghezza di una stringa

Una delle funzioni più semplici da usare è la strlen, per il calcolo della lunghezza di una stringa. La lunghezza è il numero di caratteri escluso il terminatore di stringa. Si consideri il seguente esempio:

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
char stringa[]="alfabeto";
int lunghezza;

lunghezza = strlen(stringa);
cout<<lunghezza;

system("PAUSE");
return EXIT_SUCCESS;
}

Si noti che nella chiamata alla funzione il nome del vettore non è accompagnato dalle sue parentesi quadre. La cout finale visualizza il valore 8, cioè il numero di char che compongono la stringa "alfabeto" (si noti che il vettore stringa[] contiene un char in più per il carattere '\0').

 

STRCPY: copia una stringa su un'altra

La funzione strcpy realizza una sorta di assegnazione fra stringhe, in quanto copia il contenuto della seconda stringa nella prima. Si veda l'esempio seguente:

char stringa1[]="alfabeto", stringa2[20];

strcpy(stringa2,stringa1);

cout<<stringa2;

La cout finale visualizza la stringa "alfabeto" contenuta nel vettore stringa2.

Si osservi che il vettore su cui viene fatta la copia deve avere una dimensione maggiore o uguale a quello sorgente, altrimenti si rischia l'overflow.

 

STRCAT: concatena due stringhe

La funzione strcat concatena due stringhe, appendendo la seconda stringa in coda alla prima. Si consideri l'esempio seguente:

char stringa1[20]="barba", stringa2[]="gianni";

strcat(stringa1,stringa2);

cout<<stringa1;

La cout finale visualizza la stringa "barbagianni", risultante dal concatenamento di "barba" con "gianni". Anche in questo caso, per evitare un possibile overflow, occorre che la stringa su cui viene fatto il concatenamento sia sufficientemente lunga da poter contenere il risultato.

 

STRCMP: confronta due stringhe

La funzione strcmp confronta le due stringhe passate come argomento e torna un valore:

Si consideri l'esempio seguente:

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
char stringa1[20], stringa2[20];
int cfr;

cout<<"Inserisci la prima parola: ";
cin>>stringa1;
cout<<"Inserisci la seconda parola: ";
cin>>stringa2;

cfr = strcmp(stringa1,stringa2);

if (cfr==0)
   cout<<"Le due stringhe sono uguali\n";
else if (cfr<0)
   cout<<stringa1<<" precede in ordina alfabetico "<<stringa2<<"\n";
else
   cout<<stringa2<<" precede in ordina alfabetico "<<stringa1<<"\n";

system("PAUSE");
return EXIT_SUCCESS;
}

Una complicazione è dovuto al fatto che in realtà la strcmp non confronta i caratteri delle due stringhe ma i rispettivi codici ASCII. Siccome i codici ASCII delle lettere maiuscole precedono i codici ASCII delle minuscole, ne consegue che la funzione considera le maiuscole precedenti le minuscole in ordine alfabetico. Per esempio fornendo le due stringhe "alfa" e "Beta", la strcmp considera "Beta" come precedente in ordine alfabetico, perché inizia con una maiuscola.

Per ovviare a questo problema è possibile convertire le due stringhe tutte in minuscolo (o in maiuscolo) prima di passarle alla funzione strcmp.

Quando la strcmp viene usata semplicemente per vedere se due stringhe sono uguali e diverse, si utilizza spesso la seguente notazione breve:

if (!strcmp(stringa1,stringa2))
cout<<"Le due stringhe sono uguali\n";
else
cout<<"Le due stringhe sono diversea\n";

Il punto esclamativo davanti a strcmp è l'operatore logico NOT, il quale trasforma una condizione vera in falsa e viceversa. In sostanza, siccome la strcmp torna 0 quando le stringhe sono uguali, usando il NOT la condizione viene considerata vera dall'istruzione if.

 

 

link precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it