Șiruri în C: Cum să declarați și să inițializați variabilele unui șir în C
Ce este String în C?
A Coarda in C nu este altceva decât o colecție de caractere într-o secvență liniară. „C” tratează întotdeauna un șir cu o singură dată, chiar dacă conține spații albe. Un singur caracter este definit folosind reprezentarea ghilimelelor simple. Un șir este reprezentat folosind ghilimele duble.
Example, "Welcome to the world of programming!"
„C” oferă o bibliotecă standard care conține multe funcții care pot fi folosite pentru a efectua operațiuni complicate cu ușurință pe Strings în C.
Cum să declari un șir în C?
AC String este o matrice simplă cu char ca tip de date. Limba „C”. nu acceptă direct șir ca tip de date. Prin urmare, pentru a afișa un șir în C, trebuie să utilizați o matrice de caractere.
Sintaxa generală pentru declararea unei variabile ca șir în C este următoarea:
char string_variable_name [array_size];
Declarația clasică de șiruri se poate face după cum urmează:
char string_name[string_length] = "string";
Mărimea unui tablou trebuie definită în timp ce se declară o variabilă String C, deoarece este folosită pentru a calcula câte caractere vor fi stocate în variabila șir în C. Câteva exemple valide de declarare șir sunt următoarele:
char first_name[15]; //declaration of a string variable char last_name[15];
Exemplul de mai sus reprezintă variabile șir cu o dimensiune a matricei de 15. Aceasta înseamnă că matricea de șiruri C dată este capabilă să dețină cel mult 15 caractere. Indexarea matricei începe de la 0, prin urmare, va stoca caractere dintr-o poziție 0-14. Compilatorul C adaugă automat un caracter NULL „\0” la matricea de caractere creată.
Cum să inițializezi un șir în C?
Să studiem inițializarea șirurilor în C. Următorul exemplu demonstrează inițializarea șirurilor în 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*/
În șirul 3, caracterul NULL trebuie adăugat în mod explicit, iar caracterele sunt cuprinse între ghilimele simple.
„C” ne permite de asemenea să inițializam a variabilă șir fără a defini dimensiunea matricei de caractere. Se poate face în felul următor,
char first_name[ ] = "NATHAN";
Numele șirurilor de caractere în C acționează ca un pointer, deoarece este practic o matrice.
Intrare șir C: Program C pentru a citi șirul
Când scrieți programe interactive care solicită utilizatorului introducerea, C furnizează funcțiile scanf(), gets() și fgets() pentru a găsi o linie de text introdusă de utilizator.
Când folosim scanf() pentru a citi, folosim specificatorul de format „%s” fără a folosi „&” pentru a accesa adresa variabilei, deoarece un nume de matrice acționează ca un pointer.
De exemplu:
#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);
}
ieșire:
Enter your first name and age: John_Smith 48
Problema cu funcția scanf este că nu citește niciodată șiruri întregi în C. Acesta va opri procesul de citire de îndată ce apare spațiul alb, avansul formularului, fila verticală, linia nouă sau întoarcerea carului. Să presupunem că dăm intrare ca „Tutoriale Guru99”, atunci funcția scanf nu va citi niciodată un șir întreg, deoarece apare un caracter alb între cele două nume. Funcția scanf va citi doar Guru99.
Pentru a citi un șir care conține spații, folosim funcția gets(). Gets ignoră spațiile albe. Se oprește
citirea când se ajunge la o linie nouă (este apăsată tasta Enter).
De exemplu:
#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;
}
ieșire:
Enter your full name: Dennis Ritchie My full name is Dennis Ritchie
O altă alternativă mai sigură la gets() este funcția fgets() care citește un număr specificat de caractere.
De exemplu:
#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;}
ieșire:
Enter your name plz: Carlos My name is Carlos
Argumentele fgets() sunt:
- numele șirului,
- numărul de caractere de citit,
- stdin înseamnă a citi de la intrarea standard care este tastatura.
C String Output: program C pentru a imprima un șir
Funcția standard printf este utilizată pentru tipărirea sau afișarea șirurilor de caractere în C pe un dispozitiv de ieșire. Specificatorul de format folosit este %s
Exemplu,
printf("%s", name);
Ieșirea șirurilor se face cu funcțiile fputs() și printf().
funcția fputs().
fputs() are nevoie de numele șirului și de un indicator către locul în care doriți să afișați textul. Folosim stdout care se referă la ieșirea standard pentru a imprima pe ecran.
De exemplu:
#include <stdio.h>
int main()
{char town[40];
printf("Enter your town: ");
gets(town);
fputs(town, stdout);
return 0;}
ieșire:
Enter your town: New York New York
pune funcția
Funcția puts este folosită pentru a imprima șirul în C pe un dispozitiv de ieșire și pentru a muta cursorul înapoi la prima poziție. O funcție puts poate fi utilizată în felul următor,
#include <stdio.h>
int main() {
char name[15];
gets(name); //reads a string
puts(name); //displays a string
return 0;}
Sintaxa acestei funcții este relativ simplă decât alte funcții.
Biblioteca de șiruri
Biblioteca standard „C” oferă diverse funcții pentru a manipula șirurile dintr-un program. Aceste funcții sunt, de asemenea, numite handler de șir. Toți acești manipulatori sunt prezenți în interior fișier antet.
| Funcţie | Scop |
|---|---|
| strlen() | Această funcție este folosită pentru a găsi lungimea unui șir. Returnează câte caractere sunt prezente într-un șir, excluzând caracterul NULL. |
| strcat(str1, str2) | Această funcție este folosită pentru a combina două șiruri împreună pentru a forma un singur șir. Se adaugă sau concatenează str2 la sfârșitul lui str1 și returnează un pointer la str1. |
| strcmp(str1, str2) | Această funcție este folosită pentru a compara două șiruri între ele. Returnează 0 dacă str1 este egal cu str2, mai mic decât 0 dacă str1 < str2 și mai mare decât 0 dacă str1 > str2. |
Să luăm în considerare programul de mai jos care demonstrează funcțiile bibliotecii de șiruri:
#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;
}
ieșire:
Strings are not equal Concatenated string:Hello World! Length of first string:12 Length of second string:7 Copied string is:Hello World!
Alte funcții importante ale bibliotecii sunt:
- strncmp(str1, str2, n): returnează 0 dacă primele n caractere ale str1 sunt egale cu primele n caractere ale str2, mai mică decât 0 dacă str1 < str2 și mai mare decât 0 dacă str1 > str2.
- strncpy(str1, str2, n) Această funcție este folosită pentru a copia un șir dintr-un alt șir. Copiază primele n caractere din str2 în str1
- strchr(str1, c): returnează un pointer la prima apariție a caracterului c în str1, sau NULL dacă caracterul nu a fost găsit.
- strrchr(str1, c): caută str1 în sens invers și returnează un pointer la poziția char c în str1, sau NULL dacă caracterul nu a fost găsit.
- strstr(str1, str2): returnează un pointer la prima apariție a lui str2 în str1, sau NULL dacă str2 nu a fost găsit.
- strncat(str1, str2, n) Adaugă (concatenează) primele n caractere ale str2 la sfârșitul str1 și returnează un pointer la str1.
- strlwr(): pentru a converti șirul în minuscule
- strupr(): pentru a converti șirul în majuscule
- strrev() : pentru a inversa șirul
Convertirea unui șir într-un număr
În programarea C, putem converti un șir de caractere numerice într-o valoare numerică pentru a preveni o eroare de rulare. Biblioteca stdio.h conține următoarele funcții pentru conversia unui șir într-un număr:
- int atoi(str) Reprezintă ASCII la un întreg; convertește str în valoarea int echivalentă. Este returnat 0 dacă primul caracter nu este un număr sau nu sunt întâlnite numere.
- double atof(str) Înseamnă ca ASCII să plutească, transformă str în valoarea dublă echivalentă. 0.0 este returnat dacă primul caracter nu este un număr sau nu sunt întâlnite numere.
- long int atol(str) Reprezintă ASCII în long int, convertește str la valoarea echivalentă a întregului lung. Este returnat 0 dacă primul caracter nu este un număr sau nu sunt întâlnite numere.
Următorul program demonstrează funcția 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;}
ieșire:
Enter a number: 221348 you enter 221348
- O declarație de tip șir de caractere, cum ar fi char *șir = „limba” este o constantă și nu poate fi modificată.
Rezumat
- Un șir este o secvență de caractere stocată într-o matrice de caractere.
- Un șir este un text cuprins între ghilimele duble.
- Un caracter precum „d” nu este un șir și este indicat prin ghilimele simple.
- „C” oferă funcții standard de bibliotecă pentru a manipula șirurile dintr-un program. Manipulatoarele de șiruri sunt stocate în fișier antet.
- Un șir trebuie declarat sau inițializat înainte de a fi utilizat într-un program.
- Există diferite funcții de șir de intrare și ieșire, fiecare dintre ele având caracteristicile sale.
- Nu uitați să includeți biblioteca de șiruri pentru a lucra cu funcțiile sale
- Putem converti șirul în număr prin intermediul atoi(), atof() și atol() care sunt foarte utile pentru procesele de codificare și decodare.
- Putem manipula diferite șiruri prin definirea unei matrice de șiruri în C.
