[ R A V E N @ 28.01.2010. 19:13 ] @
Imam slijedeći program, čija je namjena da prvo slovo u svakoj riječi unesene rečenice učini velikim:

Code (cpp):
#include <iostream>
using namespace std;

int main()
{
char ch, pre = '\0';
   
while (cin.get(ch))
    {
     if (pre == ' ' || pre == '\n') cout.put(char(toupper(ch)));
     else cout.put(ch);
     pre = ch;
    }
     
cin.get();
return 0;
}


A evo primjera rezultata:

Esse quam videri.
Esse Quam Videri.


1. Kako da unesem znak za novi red, jer program vrši testiranje i na taj znak da bi saznao kada slijedi nova riječ (unos \n zajedno sa tekstom ne pomaže)? Mislim da treba kombinirati Ctrl sa još nečim.

2. Zbunjuje me ovaj dio kôda cout.put(char(toupper(ch))). Funkcija cout.put() ima argument char(toupper(ch)), a funkcija toupper() ima argument ch, no međutim šta je ono char(...) i koja je njegova uloga? Je li to neka funkcija koja pripada objektu cout? Je li u redu da funkcija nosi ime ključne riječi C++-a (char u ovom slučaju)?

3. Ako hoću da zatvorim program (tj. da izađem iz while petlje), treba da unesem znak \0, što činim sa Ctrl+z. Na ekranu se pojavi simbol ^Z, pritisnem Enter i program se gasi. No odmah poslije while petlje je cin.get(); koja bi trebala da primi još jedan Enter pa da onda izađe iz programa, no međutim, to se ne dešava. Zašto?

4. Kako je moguće da funkcija toupper() radi (a namjena ove funkcije je transformiranje malog slova u isto to, samo veliko slovo), kad u program nije uključena biblioteka ctype.h gdje je njen prototip i definicija?

5. (Nevezano za program.) Ako želim da koristim gorepomenutu biblioteku ctype.h u nekom C++ programu, dodam #include <ctype.h>. No međutim C++ standard preporučuje korištenje #include <cctype> umjesto toga. Je li to tačno? Ako jeste, onda ctype.h i cctype nisu jedna te ista datoteka?

[Ovu poruku je menjao R A V E N dana 28.01.2010. u 20:59 GMT+1]
[ BinaryRuler @ 28.01.2010. 21:35 ] @
Za pitanje pod 1. tj. za novi red drzis alt i otkicas 10 i pustis alt. to ti je '\n'.
[ R A V E N @ 29.01.2010. 03:15 ] @
U redu... isprobaću to kasnije.

A što se tiče 4., očigledno da je ctype.h uključena unutar iostreama, pa je samim tim posredno uključena i u program.
[ X Files @ 29.01.2010. 06:42 ] @
5.
http://www.decompile.com/cpp/faq/diff_btw_h_and_no_h.htm
[ X Files @ 29.01.2010. 07:44 ] @
2. char(...)

Radi se samo o razlicitoj notaciji cast-inga:
char(nesto)
(char)nesto
...a potrebno je jer "toupper" verovatno vraca nesto sto nije "char", pa da se osigura da funkcija koja ce dobiti rezaultat (put) ima argument "ispravnog" tipa.
[ drki89 @ 31.01.2010. 13:00 ] @
Citat:

3. Ako hoću da zatvorim program (tj. da izađem iz while petlje), treba da unesem znak \0, što činim sa Ctrl+z. Na ekranu se pojavi simbol ^Z, pritisnem Enter i program se gasi. No odmah poslije while petlje je cin.get(); koja bi trebala da primi još jedan Enter pa da onda izađe iz programa, no međutim, to se ne dešava. Zašto?


cin.get() koje se nalazi odmah posle while petlje pokupi onaj ENTER koji si pritisnuo kada si uneo znak ^Z.

P.S. Da dopunim odgovor koji je postavio X Files: funkcija toupper() vraca podatak tipa int pa je potrebna konverzija.

[Ovu poruku je menjao drki89 dana 31.01.2010. u 14:13 GMT+1]
[ R A V E N @ 06.02.2010. 17:01 ] @
Hvala svima na odgovorima!