Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czytanie string i int z jednej linii

Ostatnio zmodyfikowano 2016-02-23 16:22
Autor Wiadomość
mrci
Temat założony przez niniejszego użytkownika
Czytanie string i int z jednej linii
» 2016-02-23 16:03:13
Witam!

Probuje rozwiązać jedno z zadań na SPOJ'u (http://pl.spoj.com/problems/HILLS2/) i mam problem z czytaniem linii odpowiedzialnej za wywołanie komedy(PREPARE, MOVE, TURN).

string nazwa;
int wartosc;

cin>>nazwa>>wartosc;

if (nazwa=="MOVE")
obiekt.move(wartosc);
else if (name=="TURN")
obiekt.turn(wartosc);
else if (name=="PREPARE")
obiekt.prepare();

Powyższy kawałek kodu byłby idealny, lecz komenda PREPARE jest wywoływana bez wartości, wiec jeśli chce zakończyć linie to muszę podać PREPARE 0, co skutkuje błędną odpowiedzią.
 
Drugi sposób:

string komenda;
string nazwa;
int wartosc;

getline(cin,komenda);
istringstream iss(komenda);
iss>>nazwa>>wartosc;

if (name=="MOVE")
     obiekt.move(value);
else if (name=="TURN")
     obiekt.turn(value);
else if (name=="PREPARE")
     obiekt.prepare();

Drugi sposób jaki wymyśliłem jest w 100% sprawny, lecz platforma SPOJ zwraca informacje przekroczono limit czasu :(
Z góry dzięki za jakieś cenne wskazówki.
P-145213
Gibas11
» 2016-02-23 16:06:18
Wczytuj drugą wartość tylko jeżeli nazwa != prepare.

C/C++
cin >> nazwa;
if( nazwa != "PREPARE" )
     cin >> wartosc;

P-145214
mrci
Temat założony przez niniejszego użytkownika
» 2016-02-23 16:12:05
nazwa i wartosc muszą być wczytane w jednej lini niestety :(
P-145215
Gibas11
» 2016-02-23 16:17:14
I?

C/C++
cin >> nazwa >> wartosc;
=
C/C++
cin >> nazwa;
cin >> wartosc;

EDIT:
Operator >> zwraca w tym wypadku referencję na cin i zdziwiłbym się gdyby dwa podane przeze mnie kawałki kodu zostały skompilowane w inny sposób.
P-145216
mrci
Temat założony przez niniejszego użytkownika
» 2016-02-23 16:22:29
Wielkie dzięki! Nie wiedziałem tego.
P-145217
« 1 »
  Strona 1 z 1