[ ouros @ 10.02.2002. 06:29 ] @
Narode treba mi pomoc. Totalno sam se izgubio. Imam sledeci kod sa operator overloading, glup program, znaci uzima broj telefona, tipa (xxx) xxx-xxxx, e sad kad hocu da proverim svaki karatker ponaosob, da vidim da li je stavio otvorenu zagradu ( pre pocetka pozivnog ili ne ...
zbunim se. mislim ovo mi je lako da uradim sa stringovima, ali me zbunjuje ovaj kod. ako neko ima vremena da mi pomogne bio bih zahvalan.
znaci treba mi hint: ako neko recimo umesto ovog nacina (123)123-4567

napise ovaj broj 123-456-7890 kako da proverim svaki character ali da ga ne izgubim.

ako uzmem recimo promenljivu tipa

char checkThis;

i onda

input >> setw(1) >> checkThis;
if (checkThis == '(') {
// on mi je vec pojeo prvi karakter, tako da nemogu vise da se vratim na njega

nadam se da ste me razumeli.
evo koda,pa ako moze neko da proba i da mi pomogne

#include <iostream>

using std::cout;
using std::cin;
using std::endl;
using std::ostream;
using std::istream;

#include <iomanip>

using std::setw;

class PhoneNumber {
friend ostream &operator<<( ostream&, const PhoneNumber & );
friend istream &operator>>( istream&, PhoneNumber & );

private:
char areaCode[ 4 ]; // 3-digit area code and null
char exchange[ 4 ]; // 3-digit exchange and null
char line[ 5 ]; // 4-digit line and null
};

// Overloaded stream-insertion operator (cannot be a member function if we // would like to invoke it with cout << somePhoneNumber;).
ostream &operator<<( ostream &output, const PhoneNumber &num )
{
output << "(" << num.areaCode << ") "
<< num.exchange << "-" << num.line;
return output; // enables cout << a << b << c;
}

istream &operator>>( istream &input, PhoneNumber &num )
{

input.ignore();
input >> setw( 4 ) >> num.areaCode; // input area code

input >> setw(2) >> checkString;
if (checkString == ')')
input >> setw( 4 ) >> num.exchange; // input exchange

input.ignore( ); // skip dash (-)
input >> setw( 5 ) >> num.line; // input line

return input; // enables cin >> a >> b >> c;
}

int main( )
{
PhoneNumber phone; // create object phone

cout << "Enter phone number in the form (123) 456-7890:\n";

// cin >> phone invokes operator>> function by
// issuing the call operator>>( cin, phone ).
cin >> phone;

// cout << phone invokes operator<< function by
// issuing the call operator<<( cout, phone ).
cout << "The phone number entered was: " << phone << endl;
return 0;
}




Hvala
Uros

[ Dragi Tata @ 10.02.2002. 18:19 ] @
Bojim se da te ne razumem najbolje. Ako pitaš kako da vidiš koji je sledeći simbol u istream-u, a da ga ne pokupiš odatle, koristi peek(). Primer:

Code:

#include <iostream>
using namespace std;

int main( ) 
{
   char c[10], c2;
   cout << "Type 'abcde': ";

   c2 = cin.peek( );
   cin.getline( &c[0], 9 );

   cout << c2 << " " << c << endl;
}