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

Rozdzielanie wprowadzanych danych na wejściu cin

Ostatnio zmodyfikowano 2018-03-15 20:00
Autor Wiadomość
Wolfff
Temat założony przez niniejszego użytkownika
Rozdzielanie wprowadzanych danych na wejściu cin
» 2018-03-15 16:51:49
Program jest testem z działań na liczbach zespolonych, otrzymuje się pytania i na nie odpowiada. Odpowiedź podana programowi musi być w formie:
(4.2+2i)+(0+2i),
(3-0i)*(-1+2.1i)
(0-4i)/(3-1i).
Szukam sposobu na rozdzielenie podanych wyrażeń i zapisanie ich osobno na składniki: Skl1.re, Skl1.im, Op, Skl2.re, Skl2.im.
Nie przychodzi mi do głowy żadne inne rozwiązanie niż poproszenie użytkownika o podanie wszystkiego osobno, jednak nie może to być w takiej formie. Zastanawiałem się nad zapisaniem odpowiedzi do string i potem w jakiś sposób rozdzielenie ich i zapisanie osobno do zmiennych int oraz char(dla operatora); nie jestem pewny jak to zaimplementować i czy jest może lepsze wyjście.
P-170028
jankowalski25
» 2018-03-15 17:00:38
Nie przychodzi mi do głowy żadne inne rozwiązanie niż poproszenie użytkownika o podanie wszystkiego osobno
Dlaczego?
std::cin >> raz >> dwa >> trzy;
 nie wystarczy? Ewentualnie
std::cin.get()
 do wczytywania pojedynczych znaków i
std::cin.ignore()
 do pomijania rzeczy zbędnych.

Zastanawiałem się nad zapisaniem odpowiedzi do string i potem w jakiś sposób rozdzielenie ich i zapisanie osobno do zmiennych int oraz char(dla operatora); nie jestem pewny jak to zaimplementować i czy jest może lepsze wyjście.
To też może zadziałać. Jeśli chcesz tak zrobić, to najpierw wczytaj dane do
std::string
, a później załaduj do
std::istringstream
 i wczytuj stamtąd tak samo, jak przez
std::cin
.
P-170029
Wolfff
Temat założony przez niniejszego użytkownika
» 2018-03-15 17:24:59
Pobieranie wszystkiego metodą std::cin>>raz>>dwa>>trzy; równało by się chyba z stworzeniem zmiennych trzymających w sobie nawiasy? Odpowiedź musi być podana w tamtej formie. Niestety nie zapoznałem się jeszcze z  obsługą tekstu przy pomocy
std::istringstream
, mógłbyś mnie z użyciem tego jakoś pokierować? Dzięki za pomoc.
P-170030
pekfos
» 2018-03-15 18:37:47
Pobieranie wszystkiego metodą std::cin>>raz>>dwa>>trzy; równało by się chyba z stworzeniem zmiennych trzymających w sobie nawiasy?
A co za problem? Niech raz będzie typu char dla wczytania nawiasu, dwa niech będzie double dla wczytania części rzeczywistej, itd. >> zapewni ci pomijanie białych znaków. No i wypadałoby sprawdzić, czy znak wczytany w miejscu nawiasu na pewno zawiera w sobie odpowiedni nawias, operator, jednostkę urojoną itp. To, plus flagi błędów strumienia, będą ci gwarantować, że dane były zgodne z formatem.
P-170036
Wolfff
Temat założony przez niniejszego użytkownika
» 2018-03-15 19:01:41
Otrzymuję bardzo dziwny wynik. Może przeciążenie operatorów << oraz >> do pobierania i wyświetlania liczb zespolonych było by lepszym pomysłem ale wewnątrz kod i tak by musiał w podobny sposób przesortować te dane i zapisać je do odpowiednich zmiennych.

C/C++
cout << "hello world!" << endl;
LZespolona Skl1;
LZespolona Skl2;
char Op;
char nawias;
int znk1, znk2;
cout << "Podaj wynik w takiej samej postaci w jakiej jest zadane pytanie." << endl;
cin >> nawias >> Skl1.re >> znk1 >> Skl1.im >> nawias >> Op >> nawias >> Skl2.re >> znk2 >> Skl2.im >> nawias;
cout << "Podales odpowiedz: " << Skl1.re << endl << Skl1.im << endl << Op << endl << Skl2.re << endl << Skl2.im << endl;

hello world!
Podaj wynik w takiej samej postaci w jakiej jest zadane pytanie.
(21+3)-(3*17)
Podales odpowiedz: 21
0

9.57895e-265
1.91554e+264

P-170038
pekfos
» 2018-03-15 19:15:40
Usuń te znk1 i znk2.

//edit
(21+3)-(3*17)
Te wejście jest niezgodne z formatem który opisałeś.
P-170039
Wolfff
Temat założony przez niniejszego użytkownika
» 2018-03-15 19:20:11
Teraz działa! Dzięki wielkie, teraz to postaram się zdefiniować w przeciążeniu >>. Wiesz może dlaczego zmienne (kompletnie nie potrzebne) przechowujące te znaki mieszały tak bardzo w wyniku?
P-170040
Wolfff
Temat założony przez niniejszego użytkownika
» 2018-03-15 19:23:02
pekfos, no nie zgodny był bo jeszcze nie wprowadziłem wtedy zmiennej która by wyłapywała i z części zespolonych, ale teraz już dodałem i wszystko działa na obowiązkowym formacie.
C/C++
cout << "hello world!" << endl;
LZespolona Skl1;
LZespolona Skl2;
char Op;
char nawias;
char i;
cout << "Podaj wynik w takiej samej postaci w jakiej jest zadane pytanie." << endl;
cin >> nawias >> Skl1.re >> Skl1.im >> i >> nawias >> Op >> nawias >> Skl2.re >> Skl2.im >> i >> nawias;
cout << "Podales odpowiedz: " << Skl1.re << endl << Skl1.im << endl << Op << endl << Skl2.re << endl << Skl2.im << endl;

hello world!
Podaj wynik w takiej samej postaci w jakiej jest zadane pytanie.
(18-9i)/(3+14i)
Podales odpowiedz: 18
-9
/
3
14
P-170041
« 1 » 2
  Strona 1 z 2 Następna strona