[ marko000 @ 18.05.2003. 11:03 ] @
Napisao sam sasvim jenostavnu klasu za string za unosom,ispisom i jos nekim mogucnostima..ali desava se da sa ulaza program vidi jedino rec do SPACE karaktera i to je to, tj. ako unesem string "c++ primer" u char *niz koji mi sluzi za smestanje znakovnog niza upisuje se samo prva rec do SPACE-a,tj. "c++"..
Stvarno ne mogu da nadjem objasnjenje zasto je to tako..

POMOC?
[ Časlav Ilić @ 18.05.2003. 13:07 ] @
Čitanje staje zato što je razmak podrazumevani razdvajač unosa.

Najlakše, ali najmanje fleksibilno, je da smatraš da je kraj linije razdvajač. U tom slučaju, možeš da učitaš string kao:

Code:

const int SIZE = 1024;
char buffer[SIZE];
cin.getline(buff, SIZE);


ili lepše:

Code:

#include <string>
...
std::string s;
getline(cin, s);


(usput, nadam se da praviš tu klasu kao neku vežbu, pošto već imaš standardnu klasu std::string).

Pošto se ovo pitanje često postavlja, ne bi bilo loše da se predloži neko opštije rešenje. Ono što ja trenutno koristim je šablonski efektor za čitanje citiranih stringova, sa sledećim mogućnostima:

Code:

ST str;

// Use default quotes.
cin >> quoted<ST>(str);

// Use second param as starting and closing quote.
cin >> quoted<ST>(str, "'");

// Provide separate starting and closing qoutes.
cin >> quoted<ST>(str, "[", "]");

// Define default quotes, same starting and closing quote.
defaultQuotes::set("\"");

// Define default quotes, different starting and closing quotes.
defaultQuotes::set("[", "]");


Stringolika klasa ST mora da ima definisan operator = za tip const char*. Naravno, ako se na ulazu nalazi samo reč bez navodnika, podrazumeva se da čini ceo string.

Kôd je okačen uz poruku (fajl pripada jednoj mojoj servisnoj bibliotekici, i sadrži još neke efektore).