• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kalkulator w cpp

Object Storage Arubacloud
0 głosów
218 wizyt
pytanie zadane 18 listopada 2020 w C i C++ przez Hardwell Dyskutant (8,980 p.)
Witam, mam mały problem, mam do napisania prosty kalkulator w cpp, funkcje dodawania, odejmowania, dzielenia i mnożenia już mam zrobione, teraz mam mały problem, a mianowicie, program ma sam wykryć jakie działanie arytmetyczne jest wykonywane np:

cin >>"123456789+987654321"

program ma wykryć, że to dodawanie, i oddzielić lewą stronę od prawej ("123456789+987654321" jest w jednym ciągu)
komentarz 18 listopada 2020 przez NewEraOfPeace Gaduła (4,790 p.)
zesplituj se stringa na liczba znak liczba, zamien te dwie stringi-liczby na liczby i wykonaj operacje na podstawie znaku (uważaj na liczby ujemne)
komentarz 18 listopada 2020 przez tkz Nałogowiec (42,000 p.)

@Hardwell, A nie możesz zamiast cin >>"123456789+987654321" zrobić tak cin >>pierwszaLiczba>>znak>>drugaLiczba?

 

komentarz 18 listopada 2020 przez Hardwell Dyskutant (8,980 p.)
W sumie mogę, ale czy to coś da? dodam, że wartości (a i b) trzymam w stringach, jest to konieczne, ponieważ program ma obsługiwać duże wartości liczbowe, zaś typ wyrażenia (+,-,*,/) przechowuję w char
komentarz 18 listopada 2020 przez tkz Nałogowiec (42,000 p.)
Duże, to ile?
komentarz 18 listopada 2020 przez Hardwell Dyskutant (8,980 p.)
np 12345678901234567890
komentarz 18 listopada 2020 przez tkz Nałogowiec (42,000 p.)
Nie będziesz musiał wyciągać znaku osobno, będziesz miał go w osobnej zmiennej.
komentarz 18 listopada 2020 przez Hardwell Dyskutant (8,980 p.)

Właśnie nie, mam zmianne a i b (string), zaś operator w char, mam tak:
 

    string a, b;
    char wyrazenie;

    cin >> a >> wyrazenie >> b;
    cout << wyrazenie;

po wpisaniu w konsole 
1+1 program przeskakuje dalej, więc znów wpisuję 1+1, to program wyświetla 1

komentarz 18 listopada 2020 przez tangarr Mędrzec (154,860 p.)
Jeżeli chcesz obsługiwać liczby większe od 9 trylionów to potrzebujesz typy BigInt. Możesz go zaprogramować sam, lub poszukać gotowej biblioteki.
Dla liczb mniejszych możesz używać typu long long.
komentarz 18 listopada 2020 przez Hardwell Dyskutant (8,980 p.)
Według zadania muszę zostać na stringu
komentarz 18 listopada 2020 przez tkz Nałogowiec (42,000 p.)

@Hardwell, Oczekiwany ciąg wygląda tak: 4234 + 423423. Spację są kluczowe. 

1 odpowiedź

+2 głosów
odpowiedź 18 listopada 2020 przez tangarr Mędrzec (154,860 p.)

Jeżeli jesteś pewien, że napis wejściowy zawsze jest postaci {liczba}{znak operacji}{liczba} bez białych znaków to wystarczy, żebyś użył funkcji find (lub jeszcze lepiej find_if ) do znalezienia znaku operacji. Wtedy wszystko przed tym znakiem jest pierwszą liczbą, wszystko za nim drugą liczbą.

komentarz 18 listopada 2020 przez Hardwell Dyskutant (8,980 p.)
Mam mały problem z zastosowaniem tego
komentarz 18 listopada 2020 przez tangarr Mędrzec (154,860 p.)

Dałem ci link do złej funkcji (ogólny find dla kontenerów C++).

Klasa string posiada kilka wbudowanych funkcji szukających. Ciebie powinna zainteresować funkcja find_first_of

Przykład użycia

#include <iostream>

int main() {
    std::string napis("ala!ma");
    auto pos = napis.find_first_of("!@#$");
    if (pos == std::string::npos) {
        std::cout << "W napisie nie ma znaków specjalnych" << std::endl;
        return 1;
    }
    auto napis1 = napis.substr(0, pos);
    auto znak = napis[pos];
    auto napis2 = napis.substr(pos+1);

    std::cout << napis1 << std::endl;
    std::cout << znak << std::endl;
    std::cout << napis2 << std::endl;
}

 

komentarz 18 listopada 2020 przez Hardwell Dyskutant (8,980 p.)

Hmm, mam dziwny problem, a mianowicie mam kodzik:

    char znak;    
    string wyrazenie;
    
    cin>>wyrazenie;

    auto pos = wyrazenie.find_first_of("+-*/");

    string a = wyrazenie.substr(0, pos);
    znak = wyrazenie[pos];
    string b = wyrazenie.substr(pos + 1);
    
    cout << a;
    cout << znak;
    cout << b;

i konsola wyświetla mi tylko zmienne znak i b, zmiennej a nie wyświetla

 

komentarz 18 listopada 2020 przez tangarr Mędrzec (154,860 p.)
Wyświetl zmienne pos i wyrazenie. Wklej output programu.

Podobne pytania

0 głosów
1 odpowiedź 277 wizyt
–1 głos
1 odpowiedź 946 wizyt

92,575 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...