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.
|
|
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 . |
|
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. |
|
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. |
|
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. 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 |
|
pekfos |
» 2018-03-15 19:15:40 Usuń te znk1 i znk2. //edit Te wejście jest niezgodne z formatem który opisałeś. |
|
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? |
|
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. 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 |
|
« 1 » 2 |