Nizovi u C-u: Kako deklarirati i inicijalizirati varijable niza u C-u
Što je String u C-u?
A Niz u C nije ništa drugo nego zbirka znakova u linearnom nizu. 'C' uvijek tretira niz kao jedan podatak iako sadrži razmake. Pojedinačni znak je definiran korištenjem predstavljanja jednostrukih navodnika. Niz je predstavljen dvostrukim navodnicima.
Example, "Welcome to the world of programming!"
'C' pruža standardnu biblioteku koji sadrži mnoge funkcije koje se mogu koristiti za jednostavno izvođenje kompliciranih operacija na nizovima u C-u.
Kako deklarirati niz u C-u?
AC String je jednostavan niz sa char kao tipom podataka. 'C' jezik ne podržava izravno niz kao tip podataka. Dakle, da biste prikazali niz u C-u, trebate koristiti niz znakova.
Opća sintaksa za deklariranje varijable kao niza u C-u je sljedeća,
char string_variable_name [array_size];
Klasična deklaracija nizova može se napraviti na sljedeći način:
char string_name[string_length] = "string";
Veličina niza mora biti definirana tijekom deklaracije C String varijable jer se koristi za izračunavanje koliko će znakova biti pohranjeno unutar string varijable u C. Neki valjani primjeri string deklaracije su sljedeći,
char first_name[15]; //declaration of a string variable char last_name[15];
Gornji primjer predstavlja varijable niza s veličinom niza od 15. To znači da dani C niz nizova može sadržavati najviše 15 znakova. Indeksiranje niza počinje od 0, stoga će pohraniti znakove od 0-14 pozicije. C prevodilac automatski dodaje NULL znak '\0' stvorenom nizu znakova.
Kako inicijalizirati niz u C-u?
Proučimo inicijalizaciju niza u C-u. Sljedeći primjer pokazuje inicijalizaciju nizova u C-u,
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*/
U string3, znak NULL mora biti izričito dodan, a znakovi su zatvoreni u jednostruke navodnike.
'C' nam također omogućuje da inicijaliziramo a string varijabla bez definiranja veličine niza znakova. To se može učiniti na sljedeći način,
char first_name[ ] = "NATHAN";
Naziv nizova u C-u djeluje kao pokazivač jer je u osnovi niz.
C String Input: C program za čitanje niza
Kada pišete interaktivne programe koji od korisnika traže unos, C nudi funkcije scanf(), gets() i fgets() za pronalaženje retka teksta koji je unio korisnik.
Kada koristimo scanf() za čitanje, koristimo specifikator formata "%s" bez upotrebe "&" za pristup adresi varijable jer naziv polja djeluje kao pokazivač.
Na primjer:
#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); }
Izlaz:
Enter your first name and age: John_Smith 48
Problem s funkcijom scanf je taj što ona nikada ne čita cijele nizove u C-u. Zaustavit će proces čitanja čim se pojavi razmak, uvlačenje obrasca, okomiti tabulator, novi redak ili povratak na novi red. Pretpostavimo da unos dajemo kao “Guru99 Tutorials” tada funkcija scanf nikada neće pročitati cijeli niz jer se između dva imena pojavljuje razmak. Funkcija scanf će samo čitati Guru99.
Kako bismo pročitali niz koji sadrži razmake, koristimo funkciju gets(). Gets zanemaruje razmake. Prestaje
čitanje kada se dođe do novog retka (pritisnuta je tipka Enter).
Na primjer:
#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; }
Izlaz:
Enter your full name: Dennis Ritchie My full name is Dennis Ritchie
Još jedna sigurnija alternativa gets() je funkcija fgets() koja čita određeni broj znakova.
Na primjer:
#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;}
Izlaz:
Enter your name plz: Carlos My name is Carlos
Argumenti fgets() su:
- naziv niza,
- broj znakova za čitanje,
- stdin znači čitati sa standardnog ulaza koji je tipkovnica.
Izlaz C niza: C program za ispis niza
Standardna funkcija printf koristi se za ispis ili prikaz nizova u C-u na izlaznom uređaju. Upotrijebljeni specifikator formata je %s
Primjer,
printf("%s", name);
Ispis niza se vrši funkcijama fputs() i printf().
funkcija fputs().
Funkcija fputs() treba ime niza i pokazivač na mjesto gdje želite prikazati tekst. Koristimo stdout koji se odnosi na standardni izlaz za ispis na ekran.
Na primjer:
#include <stdio.h> int main() {char town[40]; printf("Enter your town: "); gets(town); fputs(town, stdout); return 0;}
Izlaz:
Enter your town: New York New York
stavlja funkciju
Funkcija puts koristi se za ispis niza u C na izlaznom uređaju i pomicanje kursora natrag na prvu poziciju. Put funkcija se može koristiti na sljedeći način,
#include <stdio.h> int main() { char name[15]; gets(name); //reads a string puts(name); //displays a string return 0;}
Sintaksa ove funkcije je relativno jednostavna od ostalih funkcija.
Knjižnica nizova
Standardna 'C' biblioteka pruža razne funkcije za manipuliranje nizovima unutar programa. Ove se funkcije također nazivaju rukovatelji nizovima. Svi ti rukovatelji prisutni su unutra datoteka zaglavlja.
funkcija | Svrha |
---|---|
strlen() | Ova se funkcija koristi za pronalaženje duljine niza. Vraća koliko je znakova prisutno u nizu isključujući NULL znak. |
strcat(str1, str2) | Ova se funkcija koristi za kombiniranje dva niza u jedan niz. Dodaje ili spaja str2 na kraj str1 i vraća pokazivač na str1. |
strcmp(str1, str2) | Ova se funkcija koristi za međusobnu usporedbu dva niza. Vraća 0 ako je str1 jednak str2, manje od 0 ako je str1 < str2 i veće od 0 ako je str1 > str2. |
Razmotrimo donji program koji demonstrira funkcije biblioteke nizova:
#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; }
Izlaz:
Strings are not equal Concatenated string:Hello World! Length of first string:12 Length of second string:7 Copied string is:Hello World!
Druge važne funkcije knjižnice su:
- strncmp(str1, str2, n) : vraća 0 ako je prvih n znakova str1 jednako prvih n znakova str2, manje od 0 ako je str1 < str2, i veće od 0 ako je str1 > str2.
- strncpy(str1, str2, n) Ova funkcija se koristi za kopiranje niza iz drugog niza. Kopira prvih n znakova str2 u str1
- strchr(str1, c): vraća pokazivač na prvo pojavljivanje char c u str1, ili NULL ako znak nije pronađen.
- strrchr(str1, c): pretražuje str1 unazad i vraća pokazivač na poziciju char c u str1, ili NULL ako znak nije pronađen.
- strstr(str1, str2): vraća pokazivač na prvo pojavljivanje str2 u str1, ili NULL ako str2 nije pronađen.
- strncat(str1, str2, n) Dodaje (spaja) prvih n znakova str2 na kraj str1 i vraća pokazivač na str1.
- strlwr() : za pretvaranje niza u mala slova
- strupr() : za pretvaranje niza u velika slova
- strrev() : obrnuti niz
Pretvaranje niza u broj
U C programiranju možemo pretvoriti niz numeričkih znakova u numeričku vrijednost kako bismo spriječili pogrešku tijekom izvođenja. Biblioteka stdio.h sadrži sljedeće funkcije za pretvaranje niza u broj:
- int atoi(str) Označava ASCII za cijeli broj; pretvara str u ekvivalentnu int vrijednost. 0 se vraća ako prvi znak nije broj ili ako nema brojeva.
- double atof(str) Označava ASCII za float, pretvara str u ekvivalentnu vrijednost double. Vraća se 0.0 ako prvi znak nije broj ili ako nema brojeva.
- long int atol(str) Označava ASCII u long int, pretvara str u ekvivalentnu vrijednost dugog cijelog broja. 0 se vraća ako prvi znak nije broj ili ako nema brojeva.
Sljedeći program demonstrira funkciju 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;}
Izlaz:
Enter a number: 221348 you enter 221348
- Deklaracija pokazivača niza kao što je char *string = “jezik” je konstanta i ne može se mijenjati.
rezime
- Niz je niz znakova pohranjenih u nizu znakova.
- String je tekst unutar dvostrukih navodnika.
- Znak kao što je 'd' nije niz i označen je jednostrukim navodnicima.
- 'C' pruža standardne bibliotečke funkcije za manipuliranje nizovima u programu. Manipulatori nizova pohranjeni su u datoteka zaglavlja.
- Niz mora biti deklariran ili inicijaliziran prije upotrebe u programu.
- Postoje različite ulazne i izlazne funkcije niza, a svaka od njih ima svoje značajke.
- Ne zaboravite uključiti biblioteku nizova za rad s njezinim funkcijama
- Možemo pretvoriti niz u broj pomoću atoi(), atof() i atol() koji su vrlo korisni za procese kodiranja i dekodiranja.
- Možemo manipulirati različitim nizovima definiranjem niza nizova u C-u.