Stringhe in C: come dichiarare e inizializzare variabili stringa in C
Cos'รจ la stringa in C?
A Stringa in C non รจ altro che una raccolta di caratteri in una sequenza lineare. 'C' tratta sempre una stringa come un singolo dato anche se contiene spazi vuoti. Un singolo carattere รจ definito usando la rappresentazione tramite virgolette singole. Una stringa รจ rappresentata usando virgolette doppie.
Example, "Welcome to the world of programming!"
'C' fornisce la libreria standard che contiene molte funzioni che possono essere utilizzate per eseguire facilmente operazioni complicate su stringhe in C.
Come dichiarare una stringa in C?
AC String รจ un semplice array con char come tipo di dati. Linguaggio "C". non supporta direttamente la stringa come tipo di dati. Pertanto, per visualizzare una stringa in C, รจ necessario utilizzare un array di caratteri.
La sintassi generale per dichiarare una variabile come String in C รจ la seguente,
char string_variable_name [array_size];
La classica Dichiarazione delle stringhe puรฒ essere fatta come segue:
char string_name[string_length] = "string";
La dimensione di un array deve essere definita durante la dichiarazione di una variabile String C perchรฉ viene utilizzata per calcolare quanti caratteri verranno archiviati all'interno della variabile stringa in C. Alcuni esempi validi di dichiarazione di stringa sono i seguenti,
char first_name[15]; //declaration of a string variable char last_name[15];
L'esempio precedente rappresenta variabili stringa con una dimensione di array pari a 15. Ciรฒ significa che l'array di stringhe C specificato รจ in grado di contenere al massimo 15 caratteri. L'indicizzazione dell'array inizia da 0 quindi memorizzerร i caratteri da una posizione 0-14. Il compilatore C aggiunge automaticamente un carattere NULL '\0' all'array di caratteri creato.
Come inizializzare una stringa in C?
Studiamo l'inizializzazione delle stringhe in C. L'esempio seguente dimostra l'inizializzazione delle stringhe in C,
char first_name[15] = "ANTHONY";
char first_name[15] = {'A','N','T','H','O','N','Y','\0'}; // NULL character '\0' is required at end in this declaration
char string1 [6] = "hello";/* string size = 'h'+'e'+'l'+'l'+'o'+"NULL" = 6 */
char string2 [ ] = "world"; /* string size = 'w'+'o'+'r'+'l'+'d'+"NULL" = 6 */
char string3[6] = {'h', 'e', 'l', 'l', 'o', '\0'} ; /*Declaration as set of characters ,Size 6*/
In string3, il carattere NULL deve essere aggiunto esplicitamente e i caratteri sono racchiusi tra virgolette singole.
'C' ci consente anche di inizializzare a variabile stringa senza definire la dimensione dell'array di caratteri. Puรฒ essere fatto nel modo seguente,
char first_name[ ] = "NATHAN";
Il nome Strings in C funge da puntatore perchรฉ รจ fondamentalmente un array.
Input stringa C: programma C per leggere la stringa
Quando si scrivono programmi interattivi che richiedono input all'utente, C fornisce le funzioni scanf(), goes() e fgets() per trovare una riga di testo immessa dall'utente.
Quando utilizziamo scanf() per leggere, utilizziamo l'identificatore di formato "%s" senza utilizzare "&" per accedere all'indirizzo della variabile perchรฉ il nome di un array funge da puntatore.
Per esempio:
#include <stdio.h>
int main() {
char name[10];
int age;
printf("Enter your first name and age: \n");
scanf("%s %d", name, &age);
printf("You entered: %s %d",name,age);
}
Produzione:
Enter your first name and age: John_Smith 48
Il problema con la funzione scanf รจ che non legge mai intere stringhe in C. Interrompe il processo di lettura non appena si verifica uno spazio bianco, un avanzamento modulo, una tabulazione verticale, un'interruzione di riga o un ritorno a capo. Supponiamo di fornire l'input come "Guru99 Tutorialsโ quindi la funzione scanf non leggerร mai un'intera stringa poichรฉ tra i due nomi si trova un carattere di spazio bianco. La funzione scanf leggerร solo Guru99.
Per leggere una stringa che contiene spazi, utilizziamo la funzione goes(). Ottiene ignora gli spazi bianchi. Si ferma
lettura quando viene raggiunta una nuova riga (viene premuto il tasto Invio).
Per esempio:
#include <stdio.h>
int main() {
char full_name[25];
printf("Enter your full name: ");
gets(full_name);
printf("My full name is %s ",full_name);
return 0;
}
Produzione:
Enter your full name: Dennis Ritchie My full name is Dennis Ritchie
Un'altra alternativa piรน sicura a goes() รจ la funzione fgets() che legge un numero specificato di caratteri.
Per esempio:
#include <stdio.h>
int main() {
char name[10];
printf("Enter your name plz: ");
fgets(name, 10, stdin);
printf("My name is %s ",name);
return 0;}
Produzione:
Enter your name plz: Carlos My name is Carlos
Gli argomenti fgets() sono:
- il nome della stringa,
- il numero di caratteri da leggere,
- stdin significa leggere dall'input standard che รจ la tastiera.
Output stringa C: programma C per stampare una stringa
La funzione printf standard viene utilizzata per stampare o visualizzare stringhe in C su un dispositivo di output. L'identificatore di formato utilizzato รจ %s
Esempio,
printf("%s", name);
L'output della stringa viene eseguito con le funzioni fputs() e printf().
funzione fputs()
fputs() necessita del nome della stringa e di un puntatore al punto in cui si desidera visualizzare il testo. Usiamo stdout che si riferisce all'output standard per stampare sullo schermo.
Per esempio:
#include <stdio.h>
int main()
{char town[40];
printf("Enter your town: ");
gets(town);
fputs(town, stdout);
return 0;}
Produzione:
Enter your town: New York New York
mette la funzione
La funzione puts viene utilizzata per stampare una stringa in C su un dispositivo di output e spostare il cursore indietro alla prima posizione. Una funzione puts puรฒ essere utilizzata nel modo seguente,
#include <stdio.h>
int main() {
char name[15];
gets(name); //reads a string
puts(name); //displays a string
return 0;}
La sintassi di questa funzione รจ relativamente semplice rispetto ad altre funzioni.
La libreria delle stringhe
La libreria standard 'C' fornisce varie funzioni per manipolare le stringhe all'interno di un programma. Queste funzioni sono anche chiamate gestori di stringhe. Tutti questi gestori sono presenti all'interno file di intestazione.
| Funzione | Missione |
|---|---|
| strlen () | Questa funzione viene utilizzata per trovare la lunghezza di una stringa. Restituisce quanti caratteri sono presenti in una stringa escluso il carattere NULL. |
| strcat(str1, str2) | Questa funzione viene utilizzata per combinare due stringhe insieme per formare un'unica stringa. Aggiunge o concatena str2 alla fine di str1 e restituisce un puntatore a str1. |
| strcmp(str1, str2) | Questa funzione viene utilizzata per confrontare due stringhe tra loro. Restituisce 0 se str1 รจ uguale a str2, minore di 0 se str1 < str2 e maggiore di 0 se str1 > str2. |
Consideriamo il programma seguente che dimostra le funzioni della libreria di stringhe:
#include <stdio.h>
#include <string.h>
int main () {
//string initialization
char string1[15]="Hello";
char string2[15]=" World!";
char string3[15];
int val;
//string comparison
val= strcmp(string1,string2);
if(val==0){
printf("Strings are equal\n");
}
else{
printf("Strings are not equal\n");
}
//string concatenation
printf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world!
//string length
printf("\nLength of first string:%d",strlen(string1));
printf("\nLength of second string:%d",strlen(string2));
//string copy
printf("\nCopied string is:%s\n",strcpy(string3,string1)); //string1 is copied into string3
return 0;
}
Produzione:
Strings are not equal Concatenated string:Hello World! Length of first string:12 Length of second string:7 Copied string is:Hello World!
Altre importanti funzioni della libreria sono:
- strncmp(str1, str2, n) :restituisce 0 se i primi n caratteri di str1 sono uguali ai primi n caratteri di str2, minore di 0 se str1 < str2, e maggiore di 0 se str1 > str2.
- strncpy(str1, str2, n) Questa funzione viene utilizzata per copiare una stringa da un'altra stringa. Copia i primi n caratteri di str2 in str1
- strchr(str1, c): restituisce un puntatore alla prima occorrenza del carattere c in str1, oppure NULL se il carattere non viene trovato.
- strrchr(str1, c): cerca str1 al contrario e restituisce un puntatore alla posizione del carattere c in str1, o NULL se il carattere non viene trovato.
- strstr(str1, str2): restituisce un puntatore alla prima occorrenza di str2 in str1, oppure NULL se str2 non viene trovata.
- strncat(str1, str2, n) Aggiunge (concatena) i primi n caratteri di str2 alla fine di str1 e restituisce un puntatore a str1.
- strlwr(): per convertire la stringa in minuscolo
- strupr() : per convertire la stringa in maiuscolo
- strrev() : per invertire la stringa
Conversione di una stringa in un numero
Nella programmazione C, possiamo convertire una stringa di caratteri numerici in un valore numerico per evitare un errore di runtime. La libreria stdio.h contiene le seguenti funzioni per convertire una stringa in un numero:
- int atoi(str) Sta per ASCII in intero; converte str nel valore int equivalente. Viene restituito 0 se il primo carattere non รจ un numero o se non viene rilevato alcun numero.
- double atof(str) Sta per ASCII in float, converte str nel valore double equivalente. Viene restituito 0.0 se il primo carattere non รจ un numero o non vengono incontrati numeri.
- long int atol(str) Sta per ASCII in long int, converte str nel valore intero lungo equivalente. Viene restituito 0 se il primo carattere non รจ un numero o se non viene rilevato alcun numero.
Il seguente programma dimostra la funzione atoi():
#include <stdio.h>
int main()
{char *string_id[10];
int ID;
printf("Enter a number: ");
gets(string_id);
ID = atoi(string_id);
printf("you enter %d ",ID);
return 0;}
Produzione:
Enter a number: 221348 you enter 221348
- Una dichiarazione di puntatore a stringa come char *string = โlingualโ รจ una costante e non puรฒ essere modificata.
Sintesi
- Una stringa รจ una sequenza di caratteri memorizzata in un array di caratteri.
- Una stringa รจ un testo racchiuso tra virgolette doppie.
- Un carattere come "d" non รจ una stringa ed รจ indicato tra virgolette singole.
- 'C' fornisce funzioni di libreria standard per manipolare le stringhe in un programma. I manipolatori di stringhe sono archiviati in file di intestazione.
- Una stringa deve essere dichiarata o inizializzata prima di essere utilizzata in un programma.
- Esistono diverse funzioni per le stringhe di input e output, ognuna di esse ha le sue caratteristiche.
- Non dimenticare di includere la libreria di stringhe per lavorare con le sue funzioni
- Possiamo convertire una stringa in numero tramite atoi(), atof() e atol() che sono molto utili per i processi di codifica e decodifica.
- Possiamo manipolare stringhe diverse definendo un array di stringhe in C.
