#include #include /* Invertiranje stringa. Varijanta s poljem i pomakom dva indeksa. */ void invertiraj(char s[]) { int p, k; /* p = pocetak, k = kraj. */ char temp; for (p = 0, k = strlen(s)-1; p < k; ++p, --k) { temp = s[p]; s[p] = s[k]; s[k] = temp; } return; } /* Glavni program - napomena oko citanja stringa s ulaza. Najjednostavnije je ucitati string u jednom redu (ukljucivo i '\n'), funkcijom gets: gets(str); ili funkcijom gets_s: gets_s(str, 80); gets_s(str, sizeof(str)); Nazalost, Intel C vise "ne zna" za funkciju gets, a (trenutno) Code::Blocks jos "ne zna" za gets_s. To bi znacilo da trebam dvije verzije glavnog programa. Umjesto toga, koristim sto slicnije citanje stringa, tako da ISTI program (jos uvijek) radi s oba kompajlera. String se cita funkcijom scanf, do kraja reda (bez '\n'): scanf("%79[^\n]", str); Tu je potrebno malo opreza, ako zelimo dozvoliti i PRAZAN red na ulazu. Za razliku od gets/gets_s, tada NE dobijemo prazan string (koji IMA samo nul-znak), vec: scanf NE ucita nista u string (NE mijenja ga!) i vrati da nije ucitao niti jedan argument, tj. izlazna vrijednost funkcije scanf je 0 (a ne 1). Zato testiramo povratnu vrijednost. Ako ona nije 1, postavljamo str[0] = '\0' (prazan string). To se moze izbjeci tako da string inicijaliziramo na prazan string: char str[80] = ""; */ int main(void) { char str[80]; /* Nije inicijaliziran! */ /* Citanje i provjera za prazan string. */ if (scanf("%79[^\n]", str) < 1) str[0] = '\0'; printf(" String (duljine %u):\n", strlen(str)); puts(str); invertiraj(str); printf(" Invertirani string:\n"); puts(str); return 0; }