Indice dei contenuti
Cos’è una Stringa in C
Una stringa in C è un array di caratteri che termina con un carattere nullo speciale, ‘\0’. Questo carattere nullo indica la fine della stringa.
Rappresentazione delle Stringhe
Le stringhe in C sono rappresentate come array di caratteri. Ad esempio:
char str[] = "Ciao";
Input/Output di Stringhe
Per leggere e scrivere stringhe, si possono usare le funzioni printf e scanf, oppure gets e puts. Ad esempio:
char str[50];
printf("Inserisci una stringa: ");
gets(str);
printf("La stringa inserita è: ");
puts(str);
Funzioni della Libreria <string.h>
La libreria <string.h> in C fornisce numerose funzioni per manipolare stringhe e array di caratteri.
strlen: Lunghezza di una Stringa
La funzione strlen restituisce la lunghezza di una stringa data. Ad esempio:
#include <string.h>
#include <stdio.h>
int main() {
char str[] = "Ciao";
int len = strlen(str);
printf("Lunghezza: %d\n", len);
return 0;
}
strcpy: Copia di una Stringa
La funzione strcpy copia la stringa sorgente nella stringa di destinazione. Ad esempio:
#include <string.h>
#include <stdio.h>
int main() {
char src[] = "Ciao";
char dest[10];
strcpy(dest, src);
printf("Destinazione: %s\n", dest);
return 0;
}
strcat: Concatenazione di Stringhe
La funzione strcat concatena due stringhe, aggiungendo la seconda alla fine della prima. Ad esempio:
#include <string.h>
#include <stdio.h>
int main() {
char str1[20] = "Ciao";
char str2[] = " Mondo";
strcat(str1, str2);
printf("Concatenata: %s\n", str1);
return 0;
}
strcmp: Confronto di Stringhe
La funzione strcmp confronta due stringhe e restituisce un valore intero che indica la relazione tra le stringhe. Ad esempio:
#include <string.h>
#include <stdio.h>
int main() {
char str1[] = "Ciao";
char str2[] = "Mondo";
if (strcmp(str1, str2) == 0) {
printf("Le stringhe sono uguali\n");
} else {
printf("Le stringhe sono diverse\n");
}
return 0;
}
Altre Funzioni
- strncpy: Copia un numero specificato di caratteri da una stringa all’altra.
- strncat: Concatena un numero specificato di caratteri da una stringa all’altra.
- strncmp: Confronta un numero specificato di caratteri tra due stringhe.
- strstr: Trova la prima occorrenza di una sottostringa in una stringa.
- strchr: Trova la prima occorrenza di un carattere in una stringa.
- strrchr: Trova l’ultima occorrenza di un carattere in una stringa.
Esempio di un programma che utilizza varie operazioni sulle stringhe
Di seguito è riportato un esempio di un programma in C che dimostra l’uso di varie operazioni sulle stringhe.
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Programmare";
char str2[20] = " in C";
char str3[40];
// Concatenazione
strcpy(str3, str1);
strcat(str3, str2);
printf("Concatenazione: %s\n", str3);
// Lunghezza
printf("Lunghezza: %d\n", strlen(str3));
// Confronto
if (strcmp(str1, str2) == 0) {
printf("Le stringhe sono uguali\n");
} else {
printf("Le stringhe sono diverse\n");
}
return 0;
}
Questo programma inizia con la definizione di due stringhe, str1 e str2. Successivamente, concatena queste due stringhe in str3, stampa la lunghezza di str3 e confronta str1 e str2 utilizzando la funzione strcmp.
Manipolazione di Stringhe
In C, una stringa è un array di caratteri terminato da un carattere nullo. La manipolazione di queste stringhe è un aspetto fondamentale della programmazione in C.
Scorrere una Stringa
Per scorrere una stringa, generalmente utilizziamo un ciclo for o while. Qui c’è un esempio che mostra come scorrere una stringa utilizzando un ciclo for:
#include <stdio.h>
int main() {
char str[] = "Ciao";
for (int i = 0; str[i] != '\0'; i++) {
printf("%c ", str[i]);
}
return 0;
}
Modificare i Caratteri di una Stringa
Modificare i caratteri di una stringa in C può essere fatto accedendo direttamente agli elementi dell’array e modificandoli. Ecco un esempio in cui convertiamo una stringa in maiuscolo:
#include <stdio.h>
int main() {
char str[] = "Ciao";
for (int i = 0; str[i] != '\0'; i++) {
if(str[i] >= 'a' && str[i] <= 'z') {
str[i] = str[i] - 'a' + 'A';
}
}
printf("Stringa in Maiuscolo: %s\n", str);
return 0;
}
Cercare Caratteri o Sottosezioni in una Stringa
Per cercare un carattere o una sottosezione in una stringa, possiamo utilizzare le funzioni strstr e strchr della libreria <string.h>. Ecco un esempio:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Ciao Mondo";
char sub[] = "Mondo";
char *pos = strstr(str, sub);
if (pos) {
printf("Sottostringa trovata in posizione: %ld\n", pos - str);
} else {
printf("Sottostringa non trovata\n");
}
char *chPos = strchr(str, 'M');
if (chPos) {
printf("Carattere trovato in posizione: %ld\n", chPos - str);
} else {
printf("Carattere non trovato\n");
}
return 0;
}
In questo esempio, strstr cerca una sottosezione all’interno di una stringa e strchr cerca la prima occorrenza di un carattere in una stringa. Entrambe le funzioni restituiscono un puntatore alla posizione, oppure NULL se la ricerca non ha esito positivo.
Stringhe e Puntatori
In C, le stringhe sono comunemente manipolate usando puntatori. Un puntatore a una stringa è un puntatore al suo primo carattere.
#include <stdio.h>
int main() {
char str[] = "Ciao";
char *ptr = str;
while (*ptr != '\0') {
printf("%c ", *ptr);
ptr++;
}
return 0;
}
In questo esempio, ptr è un puntatore al primo carattere della stringa str, e viene utilizzato per scorrere la stringa.
Overflow del Buffer
Un overflow del buffer si verifica quando scriviamo dati oltre la fine del buffer allocato. Questo è un problema comune e potenzialmente pericoloso in C.
#include <stdio.h>
int main() {
char buffer[10];
printf("Inserisci una stringa: ");
gets(buffer);
printf("Hai inserito: %s\n", buffer);
return 0;
}
In questo esempio, se l’utente inserisce più di 9 caratteri, si verificherà un overflow del buffer, potenzialmente sovrascrivendo altre aree di memoria.
Uso di gets()
La funzione gets() è usata per leggere una linea di testo, ma è pericolosa perché può causare overflow del buffer. E’ generalmente sconsigliata, e si preferisce usare fgets().
#include <stdio.h>
int main() {
char buffer[10];
printf("Inserisci una stringa: ");
fgets(buffer, sizeof(buffer), stdin);
printf("Hai inserito: %s\n", buffer);
return 0;
}
In questo esempio, usiamo fgets() al posto di gets() per evitare l’overflow del buffer.
Stringhe e Funzioni
In C, possiamo passare stringhe come argomenti a funzioni passando i loro puntatori. Ecco un esempio di una funzione che calcola la lunghezza di una stringa:
#include <stdio.h>
int lengthOfString(const char *str) {
int length = 0;
while (*str != '\0') {
length++;
str++;
}
return length;
}
int main() {
char str[] = "Ciao Mondo";
printf("La lunghezza della stringa è: %d\n", lengthOfString(str));
return 0;
}
In questo esempio, la funzione lengthOfString accetta un puntatore a una stringa come parametro e restituisce la sua lunghezza.
Domande e risposte sulle Stringhe in C
Come si può determinare la lunghezza di una stringa in C senza usare la funzione strlen()?
Puoi determinare la lunghezza di una stringa iterando attraverso i suoi caratteri fino a raggiungere il carattere null ‘\0’, e contando il numero di iterazioni. Ecco un esempio:
#include <stdio.h>
int stringLength(const char *str) {
int length = 0;
while (*str != '\0') {
length++;
str++;
}
return length;
}
Qual è il rischio associato all’uso della funzione gets() in C?
L’uso di gets() può causare un overflow del buffer, perché non controlla la lunghezza dell’input, il che può portare a comportamenti imprevisti, errori e vulnerabilità di sicurezza.
Come si possono concatenare due stringhe in C?
In C, puoi usare la funzione strcat() della libreria <string.h> per concatenare due stringhe. Assicurati che la stringa di destinazione abbia spazio sufficiente per contenere entrambe le stringhe.
È possibile modificare il contenuto di una stringa dichiarata come array di caratteri?
Sì, è possibile modificare il contenuto di una stringa dichiarata come array di caratteri, ma non è possibile modificarne la dimensione.
Come si confrontano due stringhe in C?
Per confrontare due stringhe in C, si utilizza la funzione strcmp() della libreria <string.h>. Restituisce 0 se le stringhe sono uguali, un valore negativo se la prima stringa è minore della seconda, e un valore positivo se la prima stringa è maggiore della seconda.
Come si può copiare una stringa in un altro array di caratteri in C?
Puoi usare la funzione strcpy() della libreria <string.h> per copiare una stringa in un altro array di caratteri. È importante che l’array di destinazione sia abbastanza grande per contenere la stringa copiata.
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Ciao";
char destination[10];
strcpy(destination, source);
printf("Stringa copiata: %s\n", destination);
return 0;
}