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

Czy ten zapis w IF można skrócić?

Cloud VPS
+1 głos
787 wizyt
pytanie zadane 7 kwietnia 2021 w C i C++ przez Mavimix Dyskutant (8,420 p.)
edycja 7 kwietnia 2021 przez Mavimix

Czy ten przykładowy zapis:

char x;
 
if( x == 'a' || x == 'x' ||  x == 'f' ||  x == 'd' ||  x == 'y' ||  x == 'j' ||  x == 'z' ||  x == 'l')

da się jakoś skrócić, aby wciąż nie pisać "x=="?

1 odpowiedź

+1 głos
odpowiedź 7 kwietnia 2021 przez SzkolnyAdmin Szeryf (90,110 p.)

Jeżeli x to int, to tak:

if(x>0 && x<9) {}

lub

if(x>=1 && x<=8) {}

 

komentarz 7 kwietnia 2021 przez Mavimix Dyskutant (8,420 p.)

Podałem przykład ogólny, jak widać za ogólny (już poprawione w pytaniu) :D Tak to wiem że się da. To podam inny przykład:

char x;

if( x == 'a' || x == 'x' ||  x == 'f' ||  x == 'd' ||  x == 'y' ||  x == 'j' ||  x == 'z' ||  x == 'l')

Czy w powyższym przypadku da się jakoś to skrócić?

komentarz 7 kwietnia 2021 przez j23 Mędrzec (195,240 p.)

@Mavimix,

char x;
 
if(strchr("axfdyjzl", x)) { ... }

 

komentarz 7 kwietnia 2021 przez Mavimix Dyskutant (8,420 p.)

@SzkolnyAdmin Dałem radę użyć tej biblioteki do int, ale średnio mi się udaje jej używać w przypadku tablicy char. Jest to wykonalne?

komentarz 8 kwietnia 2021 przez VBService Ekspert (256,600 p.)
edycja 8 kwietnia 2021 przez VBService

@Mavimix,  Spróbuj z ascii kodami liter wink

online

#include <iostream>
#include <sstream>

#include <cstring>
#include <algorithm>

int main()
{
    char str_[] = "axfdyjzl";
    char x;
    std::string not_find;
    
    std::istringstream iss("a x b f d y m j z l");
    std::cin.rdbuf(iss.rdbuf());
    
    while (std::cin >> x)
    {
        std::cout << ">" << x << std::endl;
        not_find = "";
        
        if (strchr(str_, x))
        { 
            std::cout << "strchr: " << x << std::endl;
        } else {
            not_find = "strchr: nie znaleziono " + std::string(1, x);
        }
        
        // https://www.asciitable.com/
        // ascii     a   x    f    d    y    j    z    l
        int a[8] = { 97, 120, 102, 100, 121, 106, 122, 108 };
        int *it = std::find( a, a + 8, (int)x );
        if (it != a + 8)
        {
            std::cout << "find: " << x << std::endl;
        } else {
            not_find += "\nfind: nie znaleziono " + std::string(1, x);
        }
        
        if (not_find != "") std::cout << not_find << std::endl;
    }
    
    return EXIT_SUCCESS;
}

komentarz 8 kwietnia 2021 przez Mavimix Dyskutant (8,420 p.)
O tym nie pomyślałem żeby tak zrobić. Dzięki.

Podobne pytania

+1 głos
3 odpowiedzi 1,176 wizyt
pytanie zadane 15 stycznia 2021 w C i C++ przez rain.deer Początkujący (430 p.)
+1 głos
2 odpowiedzi 763 wizyt
+1 głos
2 odpowiedzi 372 wizyt

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

62,908 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

Kursy INF.02 i INF.03
...