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.

Saลพmite ovu objavu uz: