Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Pietreck

[C] Liczby w ciągu znaków

Polecane posty

Witam! :happy:

Chciałbym napisać program, np. kalkulator, w którym poszczególne działania wykonuję podając wymyslone przeze mnie polecenia.

Załóżmy, że polecenia wyglądają następująco:

Add [liczba1] [liczba2] - dodaje liczba1 do liczba2

Sub [liczba1] [liczba2] - odejmuje od liczba1 liczba2

Info - Info o autorze programu :) Hehe

Gdyby nie ostatnie 'Info' implementacja byłaby prosta:

if(scanf(Add %d %d) == 1)

funkcja dodaj...

else if(scanf(Sub %d %d) == 1)

funkcja odejmij...

Jak jednak sprawdzić czy użytkownik nie wpisał akurat Info?

Mógłbym po prostu potraktować wszystko to co podaje użytkownik jako string, jednak jak wówczas "wyłowić" wartości liczbowe i móc następnie się nimi swobodnie posługiwać? W końcu mógłbym porównać kody ASCII jednak to wszystko byłoby dosyć pracochłonnie a i tak cyfry danej liczby byłyby poodzielanie:( Bardzo proszę o pomoc! Pzdr :happy:

Link do komentarza
Udostępnij na innych stronach

Parsuj wczytaną linię. Skoro najpierw jest polecenie, to czytasz pierwszy wyraz i sprawdzasz, czy występuje wśród znanych poleceń. Jeśli tak, to odpowiednio reagujesz dalej. Jeśli nie, to zwracasz błąd.

Alternatywnie, jeśli chcesz się pobawić, zainteresuj się połączeniem programów flex i bison. Są to parser oraz lekser. Pierwszy analizuje wprowadzane dane i rozpoznaje charakterystyczne konstrukcje (liczby, teksty itd), a drugi pozwala wykonywać różne akcje w oparciu o informacje z flexa (pozwala stworzyć gramatykę). Jeśli będziesz chciał zgłębić temat, to wrzucę na forum jakieś przykładowe źródła.

Link do komentarza
Udostępnij na innych stronach

imho jeśli będziesz chciał [autorze] rozwinąć program tak by liczył np pierwiastek kwadratowy to i tak będziesz musiał zacząć jakoś parsować treść bo tam stworzysz np polecenie

sqrt liczba

co spowoduje że już ze scanfa musiałbyś łuskać polecenie + jedna liczba. A chyba lepiej zawczasu przygotować sobie dobre narzędzie które potem łatwo będziesz rozbudowywał, niż robić z każdym dodatkowym poleceniem dodatkowe pracochłonne obejścia problemów, których by nie było jeśli od początku o tym pomyślisz i temu zaradzisz [poświęcając czas RAZ, a nie n razy]

Link do komentarza
Udostępnij na innych stronach

Możesz jak w podanym kodzie. Zamiast if użyj switch

#include <conio.h>
#include <iostream>

using namespace std;
string st;
float x,y;
   void add(void)
    {
      cout<<"podaj skladniki sumy w postaci x y ";
      cin>>x>>y;
      cout<<x<<"+"<<y<<"="<<x+y;
        }
int main ()
{//EOL();
    cout<<"podaj wyrazenie np add,info ";
  cin>>st;
  if(st=="add")add();
  if(st=="info")cout<<"jestem maly Jasio";
    getch();
    return 0;
}

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...