Mirixy17 / MindPower

1 stars 0 forks source link

c_str(); #8

Closed Mirixy17 closed 4 years ago

Mirixy17 commented 4 years ago

sto funkcija _cstr(); (iz commita u primjerima 3) zapravo radi jer u ovom slucaju kod funkcionira i bez nje?

include

int main() { std::string rijec; std::cin >> rijec; std::cout << rijec.c_str(); }

lukarolak commented 4 years ago

sto funkcija _cstr(); (iz commita u primjerima 3) zapravo radi jer u ovom slucaju kod funkcionira i bez nje?

Dobro si to primjetila. Mislio sam da nam je ta funkcija potrebna da ispisujemo stringove preko funkcije cout. Izgleda da sam bio u krivu, te mozemo direktno predati stringove funkciji cout.

Htio bih ti odgovoriti na pitanje jer ti moze pomoci pri razumijevanju c++ -a.

Ako ikada imas pitanje o bilo kojoj funkciji, google je tvoj najbolji prijatelj. std::string::c_str izbacuje ovu stranicu cplusplus.com

Ta stranica je uvijek malo komplicirana u opisu, ali s vremenom ces razumjeti komplicirane rijeci koje koriste te ce ti postati vrijedan izvor informacija.


Sad cu ti ja pokusati pribliziti c_str funkciju.

String nije dio c++, sto znaci da ga je neki programmer napravio(preko class-e o kojoj cemo uciti kasnije) te mi sada mozemo koristiti njegov-u klasu(std::string) tako da #include -amo header datoteku koju je on napisao.

Ti upravo to cinis kada napises

#include <iostream>

u svome programu.


Ok posto je std::string napravio neki programmer, morao je od nekuda krenuti. Morao je postati neki kod prije nego sto je on napisao std::string nad kojim je izgadio svoju klasu. Tu te zelim podsjetiti na recenicu koju ti cesto kazem. "string je array znakova"

Fokusiraj se na rijec "znakova". C++ ima tip podatka koji moze primiti znakove. Zove se char. Vise o char-u ovdje

Char je primitivan(Bitna rijec u programiranju, kada kazemo da je nesto primitivno, to znaci da je do dio programmskog jezika) tip podatka. On moze primiti samo jedan znak.

char znak = 'L' //Moze primiti samo jedan znak

E sada kada znamo sto je char, mozemo se pitati sto radi funkcija std::string:c_str? Ukratko, pretvara std::string u niz char -ova.

char znak = 'L'; //Moze primiti samo jedan znak

string rijec_string = "rijec"; //Kreiram varijablu tipa string koja prima vrijednost "rijec"
char* rijec_char = rijec.c_str(); //Kreiram varijablu tipa char* koja prima vrijednost 'r'

Dobro pitanje sada bi bilo, zasto bi ikada trebali funkciju std::string::c_str?

Cinjenica da je std::string napisao neki programer, a char je dio c++ jezika cini velike razlike izmedu njih. std::string se moze promijeniti kad kod se taj programer sjeti da zeli dodati ili oduzeti funkcionalnost. Posto je char dio samog jezika mozemo biti poprilicno sigurni da se char ne ce mijenjati u buducnosti. Sto znaci da ako napisemo nas program koristeci samo char umjesto std::string, mozemo biti uvjereni da ce taj program raditi za 100 ili 200 godina, dok za std::string ne mozemo biti sigurni da ga netko nece promijeniti i potrgati nas program.

Postoje i drugi(bolji) razlozi zasto programmeri odlucuju koristiti primitivne tipove umjesto tipove koji su definirani u std(standard library-u), no ovo mislim da ti ovo lagano ilustrira razliku izmedu koristenja library-a i koristenja c++ jezika.

Vratimo se natrag na pitanje, zasto bi ikada trebali funkciju std::string::c_str?

Kada radimo s programima koji ocekuju char array umjesto std::string koristimo funkciju c_str kako bi mogli koristit njihovu funkcionalnost.

Ja sam mislio da std::cout funkcija ocekuje samo char* tip podatka, kada bi to bilo istina morali bi koristiti funkciju std::string::cstr, posto to nije istina mozemo predati std::cout funkciji std::string

std::string luka = "Luka";
std::cout << luka;