Copy Link
Add to Bookmark
Report

C++ Lezione 9: le stringhe

papero's profile picture
Published in 
LezioniC
 · 14 Aug 2021

Questa lezione è sulle stringhe. Le stringhe in realtà sono array, ma ci sono alcune funzioni differenti che si usano per le stringhe, come aggiungere ad una stringa, trovare la lunghezza di stringhe e anche di controllare se due stringhe sono uguali. Le stringhe sono fondamentalmente frasi o parole, come "Questa è una stringa".

Le stringhe sono fondamentalmente array di caratteri. Per esempio, per dichiarare una stringa di 50 lettere, potete dire:

 char string[50]; 

Questo dichiarerà una stringa con una lunghezza di 50 caratteri. Non dimenticate che gli array cominciano a 0, non a 1, per quanto riguarda l'indice dei numeri. Inoltre, una stringa finisce con un carattere null, alla lettera un carattere '/0'. Solo, ricordate che alla fine della stringa ci sarà sempre un carattere nullo. E' come un punto alla fine di una frase, non è contato come una lettera, però occupa uno spazio.

A cosa servono le stringhe? Bene, tanto per cominciare, potrebbe servirvi un nome di persona. Se vi serve, avrete bisogno di una stringa, perché un nome non si adatta a nessuna variabile! Si tratta, comunque, di una serie di caratteri, e così si adatta alla perfezione ad un array di caratteri.

E ora, se vogliamo immettere una stringa? Bene, se provate ad utilizzare cin>>, allora non funzionerà! Esso termina al primo spazio. Comunque, si può usare la funzione gets(char *s);.

Gets è sostanzialmente una funzione che ha legge una stringa e si ferma al primo "a capo", per esempio, quando un utente preme "Invio". Gets si trova in stdio.h. Tutto quello che dovete fare è di mettere il nome dell'array ed esso funzionerà, perché il puntatore char *s è un sistema per dire ad una funzione che state passando un array; sebbene sia un puntatore, è sempre la stringa che state dando. Sostanzialmente, char *s punta a una stringa e si può accedere a questa stringa solo come un array.

Tornerò su questo rapporto definito qui sopra in un'altra lezione, che sarà una lezione più avanzata su puntatori ed array.

Comunque, per ottenere una stringa da un utente, dovete usare gets. Un programma di esempio su ciò può essere:

 #include <stdio.h>                //Per gets 
#include <iostream.h> //per le altre funzioni input/output


void main()
{

char astring[50]; //Questo dichiara un array di caratteri che
//può essere usato come stringa

cout<<"Inserire una stringa"; //Dovreste conoscerlo!
gets(astring); //L'utente inserirà una stringa (con spazi)

cout<<"hai inserito: "<<endl; //Conoscete anche questo!
cout<<astring; //Questo è l'output dell'array di caratteri, nient'altro!

}

Ok, è abbastanza semplice. E se vogliamo utilizzare una delle eleganti funzioni di string.h?

Bene, string.h include le seguenti funzioni:

 => int strcmp(const char *s1, const char *s2); 

strcmp accetta due stringhe. Restituisce un integer. Questo integer può essere:

  • Negativo se s1 è minore di s2.
  • Zero se s1 e s2 sono uguali.
  • Positivo se s1 è maggiore di s2.

Strcmp è case sensitive.

 => int strcmpi(const char *s1, const char *s2); 

strcmpi accetta due stringhe. Restituisce un integer. Questo integer può essere:

  • Negativo se s1 è minore di s2.
  • Zero se s1 e s2 sono uguali.
  • Positivo se s1 è maggiore di s2.

Strcmpi non è case sensitive, se le parole sono in lettere maiuscole non ha importanza.

 => char *strcat(char *desc, char *src); 

strcat è un'abbreviazione per string concatenate, il cui significato è di aggiungere alla fine, o append. Fa solo questo, alla fine della prima stringa verrà aggiunta la seconda. Essenzialmente restituisce la stringa concatenata.

La prima stringa avrà l'intera stringa aggiunta.

 => char *strupr(char *s); 

strupr converte una stringa in maiuscole. Restituisce anche una stringa, che sarà tutta in maiuscole. La stringa di input, se è un array, sarà anche tutta in maiuscole.

 => char *strlwr(char *s); 

strlwr converte una stringa in minuscole. Restituisce anche una stringa, che sarà tutta in minuscole. La stringa di input, se è un array, sarà anche tutta in minuscole.

 => size_t strlen(const char *s); 

strlen restituisce la lunghezza di una stringa, meno il carattere di chiusura (/0). Non c'è niente di cui preoccuparsi su size_t. Semplicemente utilizzatelo come un integer.

Alcuni argomenti sulle stringhe possono confondere. Per esempio il const char *s. Ricordatevi solo che tutto ciò è essenzialmente una stringa! Non importa ora se il codice sia giusto, importa solo cosa fanno le funzioni.

Ora, un piccolo programma che utilizza molte funzioni sulle stringhe!

 #include <iostream.h>   //Per cout 
#include <string.h> //per molte funzioni sulle stringhe
#include <stdio.h> //Per gets

void main()
{

char name[50]; //Dichiara le variabili
char lastname[50]; //Questo potrebbe essere dichiarato nell'ultima
//linea...
cout<<"Inserisci il tuo nome: "; //Dice all'utente cosa fare
gets(name); //Usa gets per inserire stringhe con spazi o solo
//per ricevere stringhe dopo che l'utente
//ha premuto invio

if(!strcmpi("Alexander", name)) //Il ! significa not, strcmpi rstituisce 0
//per stringhe uguali
{ //strcmpi non è case sensitive
cout<<"Anche io mi chiamo così."<<endl; //Dice all'utente se è il mio nome
}
else
outputting cout<<"Non mi chiamo così."
{
cout<<"Non mi chiamo così."<<endl;
}

cout<<"Qual è il tuo nome in maiuscole?..."<<endl;
strupr(name); //strupr converte la stringa in maiuscole
cout<<name<<endl;
cout<<"Ecco il tuo nome in minuscole..."<<endl;
strlwr(name); //strlwr converte la stringa in minuscole
cout<<name<<endl;
cout<<"Il tuo nome è lungo "<<strlen(name)<<" lettere"<<endl; //strlen
//restituisce
//la lunghezza
//della stringa
cout<<"Inserisci il tuo cognome:";
gets(lastname); //lastname è anche una stringa
strcat(name, " "); //vogliamo separare i due nomi
strcat(name, lastname); //Ora li mettiamo insieme con uno spazio in mezzo
cout<<"Il tuo nome completo è "<<name; //Mostra tutto...
}


---
Nota: La mia homepage è http://www.cprogramming.com. La mia email è webmaster@cprogramming.com. Vi prego di mandarmi una email con commenti e/o suggerimenti. Se volete usare questo tutorial nel vostro sito, vi prego di mandarmi una email e dia aggiungere un link a http://www.cprogramming.com.
Grazie :)

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT