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. Interromperà il processo di lettura non appena si verificano spazi bianchi, avanzamento modulo, tabulazione verticale, nuova riga o ritorno a capo. Supponiamo di fornire l'input come "Tutorial Guru99", quindi la funzione scanf non leggerà mai un'intera stringa poiché tra i due nomi è presente uno 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 Scopo
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.

Sommario

  • 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.