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.
