Primjeri rada s C nizovima. Stringovi u C jeziku. Funkcije unosa nizova


p»í̈Trustworthy SEO agencija Indija može povećati prihode malih poduzeća

80% korisnika pretražuje na Googleu i drugim tražilicama prije kupnje, a više od 50% upita generiranih putem tražilica se pretvara. Ove dvije statistike dokazuju važnost optimizacije za tražilice. Mnogo je takvih statistika i činjenica koje jasno govore: svako malo, srednje ili veliko poduzeće treba profesionalne SEO usluge. Mala poduzeća i novoosnovana poduzeća često se suočavaju s problemima s proračunom. Oni mogu uzeti pomoć bilo koje pouzdane SEO agencije iz Indije kako bi dobili najbolju SEO uslugu u svom proračunu i povećali svoje prihode.
Pretraživanje ima velik utjecaj na umove potrošača. Prema različitim statistikama koje dijele glavni stručnjaci za optimizaciju tražilica na različitim ovlaštenim web stranicama kao što su Search Engine Land, Moz, SEO Journal, Digital Marketers India, Hubspot itd. SEO hvata većinu potencijalnih kupaca. Također, potencijalni klijenti koji dolaze iz rezultata organskog pretraživanja imaju višu stopu konverzije. Ove statistike i ponašanje potrošača jasnije pokazuju da najbolja SEO usluga nije luksuz, već nužnost za bilo koji posao.
Kako bi zaobišla konkurenciju i povećala rast poslovanja, svaka organizacija mora koristiti usluge optimizacije za tražilice. Veliki brendovi mogu uložiti dovoljno novca za stručne SEO usluge koje nudi vrhunska SEO tvrtka ili stručnjak za SEO, ali vlasnici malih tvrtki često kompromitiraju kvalitetu ove usluge zbog manjeg budžeta. Teška je činjenica da male tvrtke i startupi na kraju napuštaju prilike koje se mogu stvoriti uz profesionalnu SEO uslugu ili koriste jeftinu SEO uslugu koja ne daje pozitivne rezultate.
Vlasnici malih tvrtki i novoosnovana poduzeća mogu iskoristiti prednosti profesionalnih SEO usluga čak i uz ograničen proračun. Najbolje rješenje je pronaći pouzdanu SEO tvrtku sa sjedištem u Indiji. U Indiji postoji mnogo stručnjaka za SEO koji surađuju s agencijom za digitalni marketing i nude usluge najbolje u industriji. Oni vam mogu pružiti potrebne SEO usluge u okviru vašeg proračuna. O plaćama se može pregovarati s agencijom za SEO u Indiji kako biste dobili bolje usluge po nižim cijenama. Međutim, nemojte nasjedati na jeftinu SEO uslugu koja naplaćuje manje i obećajte da ćete dati više jer stručnost dolazi na svoju cijenu. Morate vidjeti portfelj ili postaviti odgovarajuća pitanja prije nego što ugovarate tvrtku za svoje poslovanje.
Stručnjaci za SEO u Indiji poznaju najbolje prakse optimizacije za tražilice. Također, postoje neki SEO stručnjaci u Indiji, kao što je Ash Vyas, koji su specijalizirani za stvaranje najbolje strategije za optimizaciju tražilica za tvrtku u navedenom proračunu. Stručnjaci za SEO će izraditi jasan plan i također će podijeliti koji mogu biti očekivani rezultati. Na taj način možete biti dobro svjesni svoje investicije i povrata. To pomaže u donošenju bolje poslovne odluke.
Dobra ideja je pronaći i ugovoriti pouzdanu SEO tvrtku iz Indije koja nudi najbolje SEO usluge što je prije moguće. Također možete započeti s malim proračunom i ograničenim aktivnostima kako biste počeli indeksirati svoje web-stranice i poboljšati svoje ključne riječi u tražilicama. Nemojte čekati savršeno vrijeme ili dan kada ćete imati tisuće dolara za uložiti u najbolje SEO usluge. Rani početak pomoći će vam da postignete brže rezultate ako možete biti agresivniji sa svojim marketinškim pristupom. Pouzdana SEO tvrtka sa sjedištem u Indiji pomoći će vam definirati vaše trenutne i buduće planove kako biste postigli dobre rezultate. Više indeksiranih stranica s poboljšanim rangiranjem i vjerodostojnim brendom vašeg poslovanja napravljenim stalnim profesionalnim SEO praksama udvostručit će upite, poslovanje i prihode. Svaka mala tvrtka može započeti s dvoznamenkastim ulaganjem u profesionalne SEO usluge. Postoje mnoge SEO agencije u Indiji koje nude niske proračune, ali rezultat su orijentiranih usluga optimizacije za tražilice.

ankete iz progonstva

  • CraigWew

    12.04.2018

    p»í̈Važnost uspostavljanja odnosa s kupcem u prodaji nekretnina i općoj prodaji

    Važnost uspostavljanja odnosa s kupcem.
    Uspostavljanje odnosa s kupcem mora se zaslužiti i mora mu se pristupiti kao vrlo sastavnom dijelu prodajnog procesa.
    Kako biste pridobili klijenta i sebe da se međusobno povežete na stvarnoj osnovi, to uključuje dvije stvari!
    Prvo, morat ćete biti svjesni i biti prisutni! Drugo, morate razumjeti da postoje dvije različite faze koje će se dogoditi tijekom ovog procesa.
    A-Budi tamo-što to znači?
    o Većina ljudi zapravo ne sluša drugu osobu dok priča. Općenito su toliko zauzeti formuliranjem svog sljedećeg odgovora ili izjave da nikako ne mogu slušati.
    o Ako ovo zvuči kao vi, biti tamo znači šutjeti i slušati!
    B-Što je prva ili početna faza?
    o Općenito imate samo nekoliko minuta da se afirmirate u umu kupaca kao netko s kim žele poslovati.
    o Kada ste u nedoumici, najbolje je prvo postaviti pitanja koja će ih izvući i govoriti o njima samima.
    o Također je uvijek sigurno pojaviti se kao profesionalac - ne mislim na stoika ili suhopara, već na nekoga tko zna što radi, govori i izgleda.
    C-Ostale faze
    o Kako vrijeme bude prolazilo, kroz razgovor i pitanja koja će imati, ili ćete utvrditi svoju sposobnost ili ne.
    o Budite svjesni da će vas vjerojatno neko vrijeme odmjeravati. Dobra je vijest da će se u nekom trenutku, ako ste uspjeli uspostaviti odnos, opustiti i oboje se možete usredotočiti na pronalaženje ili prodaju kuće.
    Što mi još može pomoći da razvijem odnos?
    o Pokušavajući razumjeti različite tipove osobnosti, a zatim izgovarajući i postavljajući prava pitanja.
    o Ako imate dobar odnos (na istoj ste valnoj duljini kao kupac), onda je prodaja u biti gotova, sada je samo pitanje pronalaženja pravog doma ili ispunjavanja popisnih papira.
    Što je s različitim osobnostima
    o Budući da ovo nije knjiga o psihijatriji, za sada samo razumite dvije glavne vrste.
    o Postoje introvertirani i ekstrovertirani ljudi.
    o Znate tip. Razmislite o tri osobe koje poznajete i koje odgovaraju svakoj klasifikaciji.
    Što je s govorom tijela i obrascima govora?
    o Ako govore brzo ili sporo, pokušajte oponašati njihove govorne obrasce.
    o Ako govore glasno ili tiho, učinite isto. Jesu li nagnuti naprijed ili nazad?
    o Nepotrebno je reći da postoji mnogo knjiga napisanih o ovoj temi. Samo imajte na umu da je to važan čimbenik—posebno kada sjedite u konferencijskoj sobi ili kod nekoga kod kuće i raspravljate o poslu od 400.000 dolara.
    Razvijanje odnosa je vještina koja se može naučiti i poboljšati.
    o Svi smo iskusili prodavača koji nam je nešto prodao, a nismo se osjećali kao da smo prodani. Razlog je taj što su on ili ona učinili da se osjećate ugodno tamo gdje ste im vjerovali.
    Kako razvijamo odnos?
    o Koristite oči i uši i postavljajte pitanja. Objasniti
    o Koristite oči:
    o Pogledajte njihovu haljinu-njihov auto-njihovu osobnu imovinu, mislim stvarno ih pogledajte i dešifrirajte što vam to govori o njima.
    o Koristite uši:
    o Slušajte što govore i postavljajte pitanja kako biste došli do dna njihove stvarne MOTIVACIJE!
    Tijekom cijelog ovog razgovora, vjerojatno ćete otkriti jednu ili dvije stvari koje su vam zajedničke s njima. (Obitelj, geografska područja, ribolov, itd.) Kada naiđete na zajednički jezik, dajte im do znanja da ste bliski, a zatim odvojite minutu da o tome porazgovarate s njima.
    Što je cilj?
    o Nakon što vas prihvate kao jednog od njih, u poziciji ste stvarno steći sjajno iskustvo u prodaji budući da sada radite zajedno, a zatim kao tim—više niste prodavač, sada ste na poziciji savjetnika .
    o Zapamtite, kupac vam ili hoće ili neće dopustiti da uđete u njegov svijet. Ako to razumijete i zaista naporno radite kako biste postali suosjećajni s njim/njom, možete steći poziciju od povjerenja. U većini slučajeva, zapravo ćete ih vidjeti kako se opuštaju (govor tijela) kada se to dogodi, vi ste na putu.
    o Kao ilustraciju, jeste li ikada održali govor i primijetili da kada se konačno povežete s članom publike, oni će kimnuti u znak odobravanja. Sve te stvari mogu izgledati banalno, ali nisu.
    Za kraj, ako možete steći povjerenje kupaca, prodaja proizvoda ili usluge je puno lakša, a iskustvo može biti ugodno za sve uključene.
    Uvijek imajte na umu da je Win/Win najbolja situacija.

U programu se nizovi mogu definirati na sljedeći način:

  • kao konstante niza;
  • kao niz znakova;
  • preko pokazivača na tip znaka;
  • poput nizova nizova.

Osim toga, mora se osigurati dodjela memorije za pohranjivanje niza.

Svaki niz znakova unutar dvostrukih navodnika "" tretira se kao string konstanta.

Za ispravan izlaz, svaki niz mora završavati nultim znakom "\0", čija je cjelobrojna vrijednost 0. Prilikom deklaracije konstante niza, nulti znak mu se automatski dodaje. Stoga će niz znakova, koji je konstanta niza, biti smješten u RAM računala, uključujući i nulti bajt.

Uzastopne RAM ćelije dodijeljene su za pohranjivanje niza. Dakle, string je niz znakova. 1 bajt je dodijeljen za pohranu koda svakog znaka u nizu.

Za postavljanje nekih servisnih znakova u konstantu niza koriste se kombinacije znakova. Dakle, ako trebate uključiti znak dvostrukih navodnika u nizu, ispred njega mora stajati znak obrnute kose crte: ‘\”‘ .

String konstante nalaze se u statičkoj memoriji. Početna adresa niza znakova u dvostrukim navodnicima tretira se kao adresa niza. String konstante često se koriste za pružanje interakcije korisnika u funkcijama kao što je printf().

Prilikom utvrđivanja niz znakova kompajleru trebate reći potrebnu veličinu memorije.

draž;

Prevodilac također može neovisno odrediti veličinu niza znakova ako je inicijalizacija niza navedena kada se deklarira kao konstanta niza:

char m2=;
char m3=( "T", "i", "x", "i", "e", ", "d", "o", "l", "i", "n", "s", ", "p ", "o", "l", "n", "y", ", "s", "v", "e", "zh", "e", "y", ", "m", "g", "l", "o", "y", "\0"};

U ovom slučaju, imena m2 i m3 su pokazivači na prve elemente nizova:

  • m2 je ekvivalent &m2
  • m2 je ekvivalent 'G'
  • m2 je ekvivalent 'o'
  • m3 je ekvivalentan &m3
  • m3 je ekvivalent 'x'

Kada deklarirate niz znakova i inicijalizirate ga konstantom niza, možete eksplicitno odrediti veličinu niza, ali navedena veličina niza mora biti veća od veličine konstante niza inicijaliziranja:

char m2= "Planinski vrhovi spavaju u tami noći.";

Za postavljanje niza možete koristiti pokazivač na tip znaka.

char *m4;

U ovom slučaju, prilikom deklaracije niza, varijabli m4 može se dodijeliti adresa niza:

m4 = m3;
*m4 je ekvivalent m3="T"
*(m4+1) je ekvivalentno m3="i"

Ovdje je m3 konstanta pokazivača. Ne možete promijeniti m3 , jer bi to značilo promjenu lokacije (adrese) niza u memoriji, za razliku od m4 .

Za pokazivač možete koristiti operaciju povećanja (prijelaz na sljedeći znak):

Nizovi nizova znakova

Ponekad programima treba opis niz nizova znakova. U ovom slučaju možete koristiti indeks retka za pristup većem broju različitih redaka.

char *pjesnik = ( “Pjesnik je umro!”, “- rob časti -”,
"Pao", "oklevetan glasinama..."};

U ovom slučaju, poet je niz koji se sastoji od četiri pokazivača na niz znakova. Svaki niz znakova je niz znakova, tako da postoje četiri pokazivača niza. Pjesnikov pokazivač upućuje na prvi redak:
*pjesnik ekvivalent "P",
*pjesnik[l] ekvivalent "-" .

Inicijalizacija se izvodi prema pravilima definiranim za nizove.
Citirani tekstovi ekvivalentni su inicijalizaciji svakog niza u nizu. Zarez odvaja susjedne
sekvence.
Također možete eksplicitno postaviti veličinu nizova znakova pomoću opisa poput ovog:

char pjesnik;

Razlika je u tome što ovaj obrazac definira "pravokutni" niz u kojem su svi redovi iste duljine.

Slobodan niz

Opis

char *pjesnik;


definira slobodni niz, gdje je duljina svake linije određena pokazivačem koji inicijalizira ovu liniju. Slobodan niz ne gubi memoriju.

Operacije nizova

Većina C operacija koje se bave nizovima rade s pokazivačima. Za postavljanje niza znakova u RAM morate:

  • dodijeliti blok RAM-a za polje;
  • inicijalizirati niz.

Za dodjelu memorije za pohranjivanje niza, mogu se koristiti funkcije dinamičke dodjele memorije. U ovom slučaju potrebno je uzeti u obzir potrebnu veličinu linije:

char *ime;
ime = (char *)malloc(10);
scanf("%9s" , ime);

Funkcija scanf() služi za unos stringa, a uneseni string ne smije biti dulji od 9 znakova. Posljednji znak sadržavat će "\0".

Funkcije unosa nizova

Funkcija scanf() može se koristiti za unos niza. Međutim, scanf() je dizajniran za dohvaćanje riječi, a ne niza. Ako za unos koristite format "%s", redak se unosi prije (ali ne uključujući) sljedećeg praznog znaka, koji može biti razmak, tabulator ili novi red.

Za unos niza, uključujući razmake, koristite funkciju

char * dobiva (char *);


ili njegov ekvivalent

char * dobiva_s(char *);

Pokazivač na niz koji treba unijeti prosljeđuje se kao argument funkciji. Funkcija traži od korisnika da unese niz, koji postavlja u niz dok korisnik ne pritisne Unesi.

Izlazne funkcije niza

Za izlaz nizova, možete koristiti funkciju o kojoj smo govorili

printf("%s" , str); // str - pokazivač na string

ili u skraćenom obliku

printf(str);

Funkcija se također može koristiti za izlaz nizova

int stavlja (char *s);

koji ispisuje niz s i pomiče kursor u novi red (za razliku od printf() ). Funkcija puts() također se može koristiti za izlaz konstanti niza unutar navodnika.

Funkcija unosa znakova

Funkcija se može koristiti za unos znakova

char getchar();


koji vraća vrijednost znaka unesenog s tipkovnice. Ova je funkcija korištena u prethodno razmotrenim primjerima za odgodu prozora konzole nakon što je program izvršen dok se ne pritisne tipka.

Funkcija ispisa znakova

Funkcija se može koristiti za izlaz znakova

char putchar(char);


koji vraća vrijednost znaka koji se ispisuje i ispisuje znak proslijeđen kao argument na ekran.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#uključi
#uključi
#uključi
int main() (
char s, sym;
int broj, i;
sustav("chcp 1251");
sustav("cls");
printf( "Unesite niz: ");
dobiva_s(s);
printf( "Unesite znak: ");
sym = getchar();
broj = 0;
za (i = 0; s[i] != "\0" ; i++)
{
if (s[i] == sym)
brojati++;
}
printf("U redu\n" );
stavlja(e); // Ispis niza
printf("znak");
putchar(sym); // Ispis simbola
printf( "događa se %d puta", brojanje);
getchar(); getchar();
povratak 0;
}

Rezultat izvršenja

Glavne funkcije standardne knjižnice string.h

Glavne funkcije standardne knjižnice string.h dane su u tablici.

Funkcija Opis

char *strcat(char *s1, char *s2)

dodaje s2 na s1, vraća s1

char *strncat(char *s1, char *s2, int n)

dodaje najviše n znakova s2 u s1, završava niz s "\0", vraća s1

char *strspy(char *s1, char *s2)

kopira niz s2 u niz s1, uključujući "\0", vraća s1
);
strncpy(m3, m1, 6); // ne dodaje "\0" na kraj retka
stavlja ( "Rezultat strncpy(m3, m1, 6)");
stavlja (m3);
strcpy(m3, m1);
stavlja ( "Rezultat strcpy(m3, m1)");
stavlja (m3);
stavlja ( "Rezultat strcmp(m3, m1) je");
printf("%d" , strcmp(m3, m1));
strncat(m3, m2, 5);
stavlja ( "Rezultat strncat(m3, m2, 5)");
stavlja (m3);
strcat(m3, m2);
stavlja ( "Rezultat strcat(m3, m2)");
stavlja (m3);
stavlja ( "Broj znakova u nizu m1 je strlen(m1) : ");
printf("%d\n" , strlen(m1));
_strnset(m3, "f" , 7);
stavlja ( "Rezultat strnset(m3, "f" , 7)");
stavlja (m3);
_strset(m3, "k");
stavlja ( "Rezultat strnset(m3, "k")");
stavlja (m3);
getchar();
povratak 0;
}

Rezultat izvršenja

Zadnja izmjena: 31.10.2015

Ulančavanje

Ulančavanje ili spajanje nizova može se izvršiti pomoću operatora + ili metode Concat:

String s1 = "zdravo"; niz s2 = "svijet"; niz s3 = s1 + " " + s2; // rezultat: string "hello world" string s4 = String.Concat(s3, "!!!"); // rezultat: string "hello world!!!" Console.WriteLine(s4);

Metoda Concat je statična metoda klase String koja uzima dva niza kao parametre. Postoje i druge verzije metode koje uzimaju drugačiji broj parametara.

Metoda spajanja također se može koristiti za spajanje nizova:

String s5 = "jabuka"; niz s6 = "dan"; niz s7 = "čuva"; string s8 = "liječnik"; niz s9 = "odsutan"; vrijednosti niza = novi niz (s5, s6, s7, s8, s9); String s10 = String.Join(" ", vrijednosti); // rezultat: string "jabuka na dan tjera doktora podalje"

Metoda Join je također statična. Verzija gore korištene metode uzima dva parametra: niz znakova za razdvajanje (u ovom slučaju razmak) i niz znakova koji će biti spojeni i odvojeni pomoću znaka za razdvajanje.

Usporedba nizova

Za usporedbu nizova upotrijebite statičku metodu usporedbe:

String s1 = "zdravo"; niz s2 = "svijet"; int rezultat = String.Compare(s1, s2); ako (rezultat<0) { Console.WriteLine("Строка s1 перед строкой s2"); } else if (result >0) ( Console.WriteLine("Redak s1 dolazi nakon retka s2"); ) else ( Console.WriteLine("Redak s1 i s2 su identični"); ) // rezultat će biti "Redak s1 prije retka s2"

Ova verzija metode Usporedi uzima dva niza i vraća broj. Ako je prvi niz abecedno viši od drugog, vraća se broj manji od nule. Inače se vraća broj veći od nule. I treći slučaj - ako su nizovi jednaki, vraća se broj 0.

U ovom slučaju, budući da je znak h abecedno viši od znaka w, prvi red će biti viši.

Traži u nizu

Pomoću metode IndexOf možemo odrediti indeks prvog pojavljivanja jednog znaka ili podniza u nizu:

String s1 = "zdravo svijetu"; char ch = "o"; int indexOfChar = s1.IndexOf(ch); // jednako 4 Console.WriteLine(indexOfChar); string subString = "rad"; int indexOfSubstring = s1.IndexOf(subString); // jednako 6 Console.WriteLine(indexOfSubstring);

Metoda LastIndexOf radi na sličan način, osim što pronalazi indeks posljednjeg pojavljivanja znaka ili podniza u nizu.

Druga skupina metoda omogućuje vam da saznate počinje li niz ili završava određenim podnizom. Za to su dizajnirane metode StartsWith i EndsWith. Na primjer, imamo zadatak izbrisati sve datoteke s nastavkom .exe iz mape:

String path = @"C:\SomeDir"; string datoteke = Imenik.GetFiles(put); za (int i = 0; i< files.Length; i++) { if(files[i].EndsWith(".exe")) File.Delete(files[i]); }

Razdvajanje žica

Pomoću funkcije Split možemo podijeliti niz u niz podnizova. Funkcija Split uzima niz znakova ili nizova kao parametar koji će služiti kao graničnici. Na primjer, izbrojimo broj riječi u pojmu tako da ga podijelimo s razmacima:

String text = "I zato se sve dogodilo"; string words = text.Split(new char ( " " )); foreach (string s u riječima) ( Console.WriteLine(s); )

Ovo nije najbolji način dijeljenja razmacima, budući da bismo mogli imati nekoliko uzastopnih razmaka u ulaznom nizu, a rezultirajući niz bi također sadržavao razmake, pa je bolje koristiti drugu verziju metode:

String words = text.Split(new char ( " "), StringSplitOptions.RemoveEmptyEntries);

Drugi parametar StringSplitOptions.RemoveEmptyEntries kaže da sve prazne podnizove treba ukloniti.

Obrezivanje linije

Za rezanje znakova na početku ili na kraju koristite funkciju Trim:

Tekst niza = "zdravo svijetu"; tekst = tekst.Trim(); // rezultat "zdravo svijetu" text = text.Trim(new char ( "d", "h" )); // rezultat "hello world"

Funkcija Trim, bez parametara, skraćuje razmake na početku i na kraju i vraća skraćeni niz. Da bismo eksplicitno odredili koji znakovi na početku i na kraju trebaju biti odrezani, možemo proslijediti niz tih znakova u funkciju.

Ova funkcija ima djelomične analoge: funkcija TrimStart skraćuje početne znakove, a funkcija TrimEnd krajnje znakove.

Funkcija Substring omogućuje vam rezanje određenog dijela niza:

String text = "Dobar dan"; // odrezano počevši od trećeg znaka text = text.Substring(2); // rezultat "dobar dan" Console.WriteLine(text); // rezanje prvo na zadnja dva znaka text = text.Substring(0, text.Length - 2); // rezultat "roshy de" Console.WriteLine(text);

Funkcija Substring također vraća skraćeni niz. Prva korištena inačica koristi indeks kao parametar, počevši od kojeg treba skraćivati ​​niz. Druga verzija koristi dva parametra - indeks početka podrezivanja i duljinu odrezanog dijela strune.

Umetnuti

Da biste umetnuli jedan red u drugi, upotrijebite funkciju Umetni:

String text = "Dobar dan"; string subString = "prekrasno"; text = text.Insert(8, subString); Console.WriteLine(text);

Prvi parametar u funkciji Insert je indeks na koji treba umetnuti podniz, a drugi parametar je sam podniz.

Uklanjanje redaka

Metoda Ukloni pomaže ukloniti dio niza:

String text = "Dobar dan"; // indeks zadnjeg znaka int ind = text.Length - 1; // izrezivanje zadnjeg znaka text = text.Remove(ind); Console.WriteLine(text); // izreži prva dva znaka text = text.Remove(0, 2);

Prva verzija metode Remove uzima indeks u nizu, počevši od kojeg treba ukloniti sve znakove. Druga verzija uzima još jedan parametar - koliko znakova treba ukloniti.

Zamjena

Za zamjenu jednog znaka ili podniza drugim koristite metodu Zamijeni:

String text = "dobar dan"; text = text.Replace("dobro", "loše"); Console.WriteLine(text); tekst = tekst.Zamijeni("o", ""); Console.WriteLine(text);

U drugom slučaju korištenja funkcije Replace, niz od jednog znaka "o" zamjenjuje se praznim nizom, odnosno zapravo se uklanja iz teksta. Ova metoda olakšava brisanje određenog teksta u recima.

Promjena velikih i malih slova

Za pretvaranje niza u velika i mala slova koristite funkcije ToUpper() i ToLower():

String hello = "Zdravo svijete!"; Console.WriteLine(hello.ToLower()); // Pozdrav svijete! Console.WriteLine(hello.ToUpper()); // POZDRAV SVIJETE!

Molimo obustavite AdBlock na ovoj stranici.

Dakle, nizovi u C jeziku. Za njih ne postoji posebna vrsta podataka, kao što je to učinjeno u mnogim drugim programskim jezicima. U C-u, string je niz znakova. Za označavanje kraja retka koristi se znak "\0", o čemu smo govorili u zadnjem dijelu ove lekcije. Ni na koji način se ne prikazuje na ekranu pa ga nećete moći pogledati.

Stvaranje i inicijaliziranje niza

Budući da je niz niz znakova, deklariranje i inicijaliziranje niza slični su sličnim operacijama s jednodimenzionalnim nizovima.

Sljedeći kod ilustrira različite načine inicijalizacije nizova.

Ispis 1.

Char str; char str1 = ("Y", "o", "n", "g", "C", "o", "d", "e", "r", "\0"); char str2 = "Zdravo!"; char str3 = "Zdravo!";

Slika 1 Deklaracija i inicijalizacija nizova

U prvom redu jednostavno deklariramo niz od deset znakova. To čak nije ni žica, jer... u njemu nema null znaka \0, za sada je to samo skup znakova.

Druga linija. Najjednostavniji način izravne inicijalizacije. Svaki simbol deklariramo zasebno. Glavna stvar ovdje je ne zaboraviti dodati nulti znak \0.

Treća linija je analogna drugoj liniji. Obratite pozornost na sliku. Jer U retku s desne strane ima manje znakova nego što ima elemenata u nizu, preostali elementi će biti popunjeni s \0 .

Četvrta linija. Kao što vidite, ovdje nije navedena veličina. Program će to automatski izračunati i stvoriti niz znakova potrebne duljine. U ovom slučaju, nulti znak \0 bit će umetnut zadnji.

Kako ispisati string

Proširimo gornji kod u punopravni program koji će prikazati stvorene retke na zaslonu.

Ispis 2.

#uključi int main(void) ( char str; char str1 = ("Y","o","n","g","C","o","d","e","r"," \0"); char str2 = "Zdravo!"; char str3 = "Zdravo!"; for(int i = 0; i< 10; i = i + 1) printf("%c\t",str[i]); printf("\n"); puts(str1); printf("%s\n",str2); puts(str3); return 0; }


Sl.2 Razni načini prikaza niza na ekranu

Kao što vidite, postoji nekoliko osnovnih načina za prikaz niza na zaslonu.

  • koristite funkciju printf s specifikatorom %s
  • koristiti funkciju puts
  • koristite funkciju fputs, navodeći standardni tok za izlaz kao stdout kao drugi parametar.

Jedina nijansa je s funkcijama puts i fputs. Imajte na umu da funkcija puts prelama izlaz u sljedeći redak, ali funkcija fputs ne.

Kao što vidite, zaključak je vrlo jednostavan.

Unos nizova

Unos niza je malo kompliciraniji od izlaza. Najjednostavniji način bi bio sljedeći:

Ispis 3.

#uključi int main(void) ( char str; gets(str); puts(str); return 0; )

Funkcija gets pauzira program, čita niz znakova unesenih s tipkovnice i smješta ga u niz znakova čije se ime prosljeđuje funkciji kao parametar.
Funkcija gets izlazi sa znakom koji odgovara tipki enter i zapisuje se u niz kao nulti znak.
Jeste li primijetili opasnost? Ako nije, kompilator će vas ljubazno upozoriti na to. Problem je u tome što gets funkcija izlazi samo kada korisnik pritisne enter. To je prepuno činjenice da možemo ići izvan niza, u našem slučaju - ako se unese više od 20 znakova.
Usput, pogreške prekoračenja međuspremnika ranije su se smatrale najčešćim tipom ranjivosti. I dalje postoje, ali njihovo korištenje za hakiranje programa postalo je mnogo teže.

Dakle, što imamo? Imamo zadatak: napisati niz u polje ograničene veličine. Odnosno, moramo nekako kontrolirati broj znakova koje je korisnik unio. I tu nam u pomoć dolazi funkcija fgets:

Ispis 4.

#uključi int main(void) ( char str; fgets(str, 10, stdin); puts(str); return 0; )

Funkcija fgets uzima tri argumenta kao ulaz: varijablu u koju treba upisati niz, veličinu niza koji treba upisati i naziv toka iz kojeg se dobivaju podaci za upisivanje u niz, u ovom slučaju stdin. Kao što već znate iz Lekcije 3, stdin je standardni ulazni tok koji se obično povezuje s tipkovnicom. Uopće nije nužno da podaci moraju dolaziti iz stdin toka; ubuduće ćemo ovu funkciju koristiti i za čitanje podataka iz datoteka.

Ako tijekom izvođenja ovog programa unesemo string dulji od 10 znakova, samo 9 znakova od početka i prijelom retka će i dalje biti upisan u niz, fgets će string “odrezati” na potrebnu duljinu.

Imajte na umu da funkcija fgets ne čita 10 znakova, već 9! Kao što se sjećamo, u stringovima posljednji znak je rezerviran za nulti znak.

Idemo to provjeriti. Pokrenimo program iz posljednjeg popisa. I unesite redak 1234567890. Na ekranu će se prikazati redak 123456789.


Slika 3 Primjer funkcije fgets

Postavlja se pitanje. Gdje je nestao deseti lik? I ja ću odgovoriti. Nije nestalo, ostaje u ulaznom toku. Pokrenite sljedeći program.

Ispis 5.

#uključi int main(void) ( char str; fgets(str, 10, stdin); puts(str); int h = 99; printf("do %d\n", h); scanf("%d",&h) ; printf("nakon %d\n", h); vrati 0; )

Evo rezultata njenog rada.


Slika 4 Neprazan stdin međuspremnik

Dopustite mi da objasnim što se dogodilo. Pozvali smo funkciju fgets. Otvorila je input stream i čekala da unesemo podatke. Unijeli smo 1234567890\n s tipkovnice (\n mislim na tipku Enter). Ovo je otišlo u stdin ulazni tok. Funkcija fgets je, kao što se i očekivalo, uzela prvih 9 znakova 123456789 iz ulaznog toka, dodala im nulti znak \0 i upisala ga u niz str. Ostalo je još 0\n u ulaznom toku.

Zatim deklariramo varijablu h. Njegovu vrijednost prikazujemo na ekranu. Zatim pozivamo funkciju scanf. Ovdje se očekuje da možemo nešto unijeti, ali... postoji 0\n koji visi u ulaznom toku, tada funkcija scanf to percipira kao naš unos i zapisuje 0 u varijablu h. Zatim ga prikazujemo na ekranu.

Ovo, naravno, nije baš ponašanje koje očekujemo. Kako bismo riješili ovaj problem, moramo očistiti ulazni međuspremnik nakon što smo iz njega pročitali korisnički unos. Za to se koristi posebna funkcija fflush. Ima samo jedan parametar - tok koji treba očistiti.

Popravimo posljednji primjer tako da radi predvidljivo.

Ispis 6.

#uključi int main(void) ( char str; fgets(str, 10, stdin); fflush(stdin); // brisanje ulaznog toka puts(str); int h = 99; printf("do %d\n", h ) ; scanf("%d",&h); printf("nakon %d\n", h); return 0; )

Sada će program raditi kako treba.


Slika 4 Ispiranje stdin međuspremnika s funkcijom fflush

Ukratko, mogu se uočiti dvije činjenice. Prvi. Trenutačno korištenje funkcije gets nije sigurno, stoga se preporučuje korištenje funkcije fgets posvuda.

Drugi. Ne zaboravite očistiti ulazni međuspremnik ako koristite funkciju fgets.

Time završavamo razgovor o unosu stringova. Samo naprijed.