$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

Tip podataka - char

U lekciji "Stringovi 1" posmatrali smo niske (niz) karaktera, no postoji i tip podataka koji predstavlja pojedinačne karaktere i zove se char. Za dodelu vrednosti promenljivoj tipa char koriste se jednostruki znaci navoda.

char karakter = 'e' ;

Obratite pažnju da se kod stringova koriste dvostruki znaci navoda.

string mojString = "tekst";
Console.WriteLine("Ovo je primer gde se koriste dvostruki znaci navoda.");

Ukoliko pokušaš da u programu napišeš jednostruke znake navoda umesto dvostrukih kod dodele vrednosti stringu, kao u sledećem primeru, dobićeš grešku.

string mojString = 'tekst';

Pristup pojedinačnom karakteru stringa

Iako su u osnovi stringovi nizovi karaktera, postoje neke razlike u radu sa njima u odnosu na rad sa nizovima. Svakom elementu stringa, radi čitanja vrednosti, možemo pristupiti kao kod bilo kog niza. Prvi karakter stringa nalazi se na poziciji 0.

U sledećoj tabeli prikazan je jedan string sa pozicijama svakog karaktera stringa:

012345678910111213
Babblebeekurs

Pogledajmo sledeći primer:

static void Main(string[] args)
{
    string s = "Babblebee kurs omogucava da se unapredi znanje iz programiranja";

    Console.WriteLine(s);

    for (int i = 0; i < s.Length; i++)
    {
        Console.Write(s[i]);
    }
    Console.WriteLine();
}

Standardni izlaz posle pokretanja navedenog programa izgleda ovako:

Babblebee kurs omogucava da se unapredi znanje iz programiranja
Babblebee kurs omogucava da se unapredi znanje iz programiranja

Možeš da primetiš da smo dobili isti prikaz iako smo koristili dva načina. Prvo smo ceo string prikazali komandom Console.WriteLine(s), a zatim smo ga prikazali znak po znak s[i].

Obratite pažnju da postoji greška u tekstu i da bi drugo slovo po redu, tj. s[1] trebalo da bude 'u', a ne 'a' kako piše. Iako string možemo da čitamo znak po znak, nije moguće da naredbom dodele menjamo pojedinačan znak. Sledeća naredba bi prikazala grešku i ne bi se izvršila.

s[1] = 'u';

Ukoliko želimo da menjamo pojedinačne znake u stringu, moramo da ga prevedemo u niz znakova.

static void Main(string[] args)
{
    string s = "Babblebee kurs omogucava da se unapredi znanje iz programiranja";

    char[] niska = s.ToArray<char>();

    niska[1] = 'u';

    for (int i = 0; i < niska.Length; i++)
    {
        Console.Write(niska[i]);
    }
    Console.WriteLine();
}

Reklama za Cipiripi u kojoj se svaki samoglasnik menja u "i" poslužila je kao ideja za sledeću aplikaciju.

| Cipiripi | |:-: | https://www.youtube.com/watch?v=JWorYHJiWnQ

Sledeći programski kod menja svaki samoglasnik u "i" u jednoj rečenici.

static void Main(string[] args)
{
    string str = "Bubblebee kurs omogucava da se unapredi znanje iz programiranja";
    Console.WriteLine(str);
	
    char[] s = str.ToArray<char>();

    for (int i = 0; i < s.Length; i++)
    {
        if (s[i] == 'a' || s[i] == 'e' || s[i] == 'o' || s[i] == 'u')
        {
            s[i] = 'i';
        }
        else if (s[i] == 'A' || s[i] == 'E' || s[i] == 'O' || s[i] == 'U')
        {
            s[i] = 'I';
        }
    }

    Console.WriteLine(s);
}

Standardni izlaz posle pokretanja navedenog programa izgleda ovako:

Bubblebee kurs omogucava da se unapredi znanje iz programiranja
Bibblibii kirs imigicivi di si inipridi zninji iz prigrimirinji

Postoje razne korisne funkcije za rad sa stringovima u jeziku C#. Ovde ćemo navesti neke od njih.

Podela stringa na niz stringova

Jedan red teksta može da sadrži više reči razdvojenih razmakom. Ukoliko želimo da ih pojedinačno obrađujemo, možemo da upotrebimo funkciju Split tako da dobijemo niz stringova. Sledeći program prikazuje u odvojenim redovima reči koje je korisnik uneo u jednom redu.

static void Main(string[] args)
{
    string str = Console.ReadLine();
    string[] s = str.Split(' ');
    for (int i = 0; i < s.Length; i++)
    {
        Console.WriteLine(s[i]);
    }
}

Funkcije za pretragu u stringu

Funkcija IndexOf se moze koristiti za pretragu pozicije karaktera u stringu, ili za poziciju podstringa. Na primer, možemo da nađemo poziciju prvog razmaka u stringu na sledeći način:

int pozicija = str.IndexOf(' ');

Ako string ne sadrži nijedan znak razmaka, rezultat koji vraća funkcija je -1.

if (str.IndexOf(' ') > -1)
{
    Console.WriteLine("String sadrzi barem jedan razmak!");
}
else
{
    Console.WriteLine("String ne sadrzi nijedan razmak!");
}

Funkcija IndexOf vraća poziciju prvog pojavljivanja datog karaktera (ili ako tog karaktera nema u stringu vratiće vrednost -1). Takođe postoji i slična funkcija LastIndexOf koja nalazi poziciju poslednje pojave datog karaktera, ili vrednost -1.

Funkcije IndexOf i LastIndexOf se mogu koristiti i za pronalaženje podstringa. Sledeći fragment programskog koda se može iskoristiti da se utvrdi da li dati string sadrži reč "je".

string text;
text = Console.ReadLine();

if (text.IndexOf("je") != -1)
{
    // ...
}

Podstringovi

Možemo izdvojiti deo stringa funkcijom Substring. Ova funkcija ne uklanja podstring iz originalnog stringa, već kreira novi string koji sadrži određeni podstring datog originalnog stringa. Traženi podstring je određen početnom pozicijom i brojem karaktera tj. dužinom, uzimajući u obzir da je pozicija početnog karaktera stringa 0. Sledeći primer dodeljuje promenljivoj fragment sekvencu od 5 karaktera počevši od pozicije 6 iz promenljive text:

string text = "De si brate, kako je, sta ima?";

string fragment = text.Substring(6, 5);

Promenljiva fragment sadrži string "brate", dok promenljiva text ostaje nepromenjena.

Ako izostavimo drugi parametar, onda će funkcija Substring vratiti podstring počevši od navedene početne pozicije pa sve do kraja stringa.

Prvi parametar mora da označava validnu/postojeću poziciju u okviru stringa, ili će ponašanje funkcije biti nedefinisano. Drugi parametar, u kombinaciji sa prvim, može uzrokovati da se premaši dužina stringa. U tom slučaju, podstring koji se vraća će sadržati sve karaktere od specificirane početne pozicije pa do kraja stringa, kao što je prikazano u sledećem primeru:

string text = "012345";

string fragment = text.Substring(2,3); // ok

fragment = text.Substring(6,2); // Nije ok (1)

fragment = text.Substring(3,10); // Nije ok (2)

(1) Ova naredba ima nedefinisano ponašanje, jer se početna pozicija ne nalazi u okviru datog stringa.

(2) Od pozicije 3 do kraja stringa nema 10 znakova.

Brisanje i umetanje podstringova

Pored izdvajanja podstringova, možemo i da modifikujemo dati string, tako što određeni podstring možemo da zamenimo drugim stringom, ili tako što možemo da izbrišemo ceo podstring.

Funkcija Remove ima dva ulazna parametra koja određuju podstring (to su početna pozicija i broj karaktera podstringa) koji se briše iz stringa. Ova funkcija ne uklanja podstring iz originalnog stringa. Umesto toga, ona kreira novi string. Tako možemo sledećim naredbama da izbacimo prvih 7 znakova iz datog stringa.

string text = "Ovo je test";

text = text.Remove(0, 7);

Umesto brisanja podstringa, podstring možemo zameniti i nekim drugim stringom, kao u sledećem primeru:

string text = "Ovo je test";

text = text.Replace("je", "nije");