eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › [Arduino] Switch... case
Ilość wypowiedzi w tym wątku: 7

  • 1. Data: 2018-10-14 10:20:37
    Temat: [Arduino] Switch... case
    Od: "Michal M. Lechanski" <m...@d...eu>

    Dzień dobry,

    switch ... case dopuszcza tylko dane typu int i char, mnie wygodnie by
    było użyć String.
    Czy istnieje podobna funkcja pozwalająca operować na danych typu string?
    Dziękuję za sugestie.


    P.S. Wiem że mogę użyć if..else.

    --
    Michał


  • 2. Data: 2018-10-14 11:46:11
    Temat: Re: [Arduino] Switch... case
    Od: "Grzegorz Niemirowski" <g...@p...onet.pl>

    Michal M. Lechanski <m...@d...eu> napisał(a):
    > Dzień dobry,
    > switch ... case dopuszcza tylko dane typu int i char, mnie wygodnie by
    > było użyć String.
    > Czy istnieje podobna funkcja pozwalająca operować na danych typu string?
    > Dziękuję za sugestie.
    > P.S. Wiem że mogę użyć if..else.

    Nie ma podobnej konstrukcji języka C++ dla typu string. Ale ja bym jej nawet
    nie szukał. Przemapuj sobie te stringi na enumy i dopiero potem używaj w
    switch..case. Pozwoli Ci to nie tylko na użycie tej konstrukcji ale też
    zwiększy czytelność/koszerność kodu. Unikamy magicznych stringów i
    magicznych liczb, stosujemy enumy, szczególnie w większych programach. Z
    tego też względu unikamy także literałów liczbowych w switch..case.
    Odpowiedni wątek na StackOverflow, ze szczególnym podkreśleniem odpowiedzi 4
    (tej z 9 punktami):
    https://stackoverflow.com/questions/16388510/evaluat
    e-a-string-with-a-switch-in-c

    --
    Grzegorz Niemirowski
    https://www.grzegorz.net/


  • 3. Data: 2018-10-14 12:08:15
    Temat: Re: [Arduino] Switch... case
    Od: Mateusz Viste <m...@n...pamietam>

    On Sun, 14 Oct 2018 09:20:37 +0100, Michal M. Lechanski wrote:

    > Dzień dobry,
    >
    > switch ... case dopuszcza tylko dane typu int i char, mnie wygodnie by
    > było użyć String.
    > Czy istnieje podobna funkcja pozwalająca operować na danych typu string?
    > Dziękuję za sugestie.
    >
    >
    > P.S. Wiem że mogę użyć if..else.

    Mi w podobnych sytuacjach zdarzało się użyć kilku rozwiązań:

    - parsowanie stringa by przydzielić mu stosownego enuma, i następnie
    switch() na enumie.

    - kiedy stringi można rozróżnić po pierwszych 4 znakach, to zwyczajny cast
    do uint32_t

    - na podstawie ciągu znaków wyliczam crc32, i następnie z tej wartości
    korzystam by rozpoznać jaka była (domniemana) zawartość stringa

    - ostatecznie męczyć się z if (strcmp()) else if () itd...

    Mateusz


  • 4. Data: 2018-10-14 12:36:39
    Temat: Re: [Arduino] Switch... case
    Od: Marek <t...@f...pl>

    W dniu 14.10.2018 o 10:20, Michal M. Lechanski pisze:
    > switch ... case dopuszcza tylko dane typu int i char, mnie wygodnie by
    > było użyć String.
    > Czy istnieje podobna funkcja pozwalająca operować na danych typu string?

    Enum Twoim przyjacielem, który Ci pomoże:

    typedef enum TZwierzaki
    {
    enKotki,
    enPieski,
    enKrowki,
    enKozki,
    enSwinki
    };

    TZwierzaki zwierzaki = enPieski; //wartość domyślna
    string ZwierzakiStr = "Pieski";

    Przykład użycia:

    if (miaauu)
    {
    ZwierzakiStr = "Kotki";
    zwierzaki = enKotki;
    }
    if (haauu)
    {
    ZwierzakiStr = "Pieski";
    zwierzaki = enPieski;
    }

    switch (zwierzaki)
    {
    case enKotki: {

    }
    break;
    case enPieski: {

    }
    break;
    case enKrowki: {

    }
    break;
    default: { //dla enKozki i enSwinki

    }
    }

    Można też po każdym "case" wstawić funkcję konwertująca łańcuch do elementu ze
    zbioru
    TZwierzaki (w necie pełno przykładów, wystarczy chwilę poszukać), ale powyższe
    rozwiązanie
    jest proste, przejrzyste i daje możliwość wykorzystania zmiennej "zwierzaki" do
    różnych
    celów, np. w GUI po rzutowaniu na int do ustawiania np. indeksu listy rozwijalnej
    (ComboBox) lub po rzutowaniu indeksu z int na typ TZwierzaki do odczytu z tejże listy
    wybranego zwierzęcia.

    --
    Pzdr.
    Marek


  • 5. Data: 2018-10-14 13:58:28
    Temat: Re: [Arduino] Switch... case
    Od: "J.F." <j...@p...onet.pl>

    Dnia 14 Oct 2018 10:08:15 GMT, Mateusz Viste napisał(a):
    > On Sun, 14 Oct 2018 09:20:37 +0100, Michal M. Lechanski wrote:
    >> switch ... case dopuszcza tylko dane typu int i char, mnie wygodnie by
    >> było użyć String.
    >> Czy istnieje podobna funkcja pozwalająca operować na danych typu string?
    >> Dziękuję za sugestie.

    >> P.S. Wiem że mogę użyć if..else.
    >
    > Mi w podobnych sytuacjach zdarzało się użyć kilku rozwiązań:
    >
    > - parsowanie stringa by przydzielić mu stosownego enuma, i następnie
    > switch() na enumie.

    Switch z int ma te zalete, ze kompilator moze tablice skokow zrobic.

    A jak parsujesz, to czy jest zysk, czy tylko strata ?

    Parsowac mozna algorytmem binarnym, w if'ach to nieco trudniejsze,
    ale mozna je optymalnie ustawic.

    > - kiedy stringi można rozróżnić po pierwszych 4 znakach, to zwyczajny cast
    > do uint32_t

    A potem unicode sie trafi :-)

    Tu z kolei kompilator nie moze tablicy skokow ... albo nie bedzie sie
    ograniczal, 100MB sobie wygeneruje :-)

    > - na podstawie ciągu znaków wyliczam crc32, i następnie z tej wartości
    > korzystam by rozpoznać jaka była (domniemana) zawartość stringa

    Metoda hash ... znana, stosowana, patrz wyzej ...

    > - ostatecznie męczyć się z if (strcmp()) else if () itd...

    I tu by sie przydalo jeszcze miec mniejsze i wieksze, i C troche
    zawodzi.
    Czy mi sie wydaje, czy w Fortranie taki trojstronny if byl ?

    J.


  • 6. Data: 2018-10-14 23:06:47
    Temat: Re: [Arduino] Switch... case
    Od: "Michal M. Lechanski" <m...@d...eu>

    W dniu 14.10.2018 o 09:20, Michal M. Lechanski pisze:

    > P.S. Wiem że mogę użyć if..else.

    Dziękuję za wszystkie odpowiedzi, w końcu okazało się że tym razem
    if...else zupełnie wystarczyło.

    --
    Michał




  • 7. Data: 2018-10-19 21:27:40
    Temat: Re: [Arduino] Switch... case
    Od: Mateusz Bogusz <m...@o...pl>

    W dniu 14.10.2018 o 23:06, Michal M. Lechanski pisze:
    > Dziękuję za wszystkie odpowiedzi, w końcu okazało się że tym razem
    > if...else zupełnie wystarczyło.

    Haha, nie dziwie się. Po takich odpowiedziach X-D

    --
    Pozdrawiam,
    Mateusz Bogusz

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: