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

Zmiana wartości bool

Object Storage Arubacloud
0 głosów
289 wizyt
pytanie zadane 27 września 2022 w C i C++ przez Sławomir Michajlidis Użytkownik (740 p.)

Czy jest sposób, aby taki kod:

if (a == 1)
    value = true;
else if (a == 2)
    value = false;

Zapisać w jednym if-ie, jak poniżej?

if (a == 1 || a == 2)
    // zmiana value;

Innymi słowy: czy jest taki syntaktyczny cukier, którym mógłbym zmienić wartość zmiennej bool, niezależnie od tego jaka jest jej wartość wyjściowa?

3
komentarz 28 września 2022 przez Great Stary wyjadacz (12,360 p.)
value = (a == 1);
2
komentarz 28 września 2022 przez tangarr Mędrzec (154,860 p.)

@Sławomir Michajlidis, 
Zastanów się jaki chcesz osiągnąć efekt w sytuacji gdy zmienna a ma wartość różną od 1 i 2.

komentarz 28 września 2022 przez Sławomir Michajlidis Użytkownik (740 p.)

@Great, surprise mega, dzięki wielkie.

1
komentarz 28 września 2022 przez Sławomir Michajlidis Użytkownik (740 p.)

Do tego pytania doprowadziło mnie zadanie ze SPOJ-a, LINK. Zadanie rozwiązałem, a rozwiązanie wygląda następująco:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

using namespace std;

int main() {
    string line;
    string temp {};
    vector <string> result;
    bool up = false;
    while (getline(cin, line)){
        for (char n: line){
            if (up == true && n >= 97 && n <= 122)
                n-=32;
            else if (n == '<')
                up = true;
            else if (n == '>')
                up = false;
            temp.push_back(n);
        }
      result.push_back(temp);
      temp.clear();
    }
    for(string n: result){
        cout << n << endl;
    }
    return 0;
}

Te wszystkie if-y trochę brzydko wyglądają, stąd to pytanie. Wiedząc teraz to, co zasugerował Great, na pierwszą myśl zrobiłbym tak:

if (up == true && n >= 97 && n <= 122)
    n -= 32;
else if (n == '<' || n == '>')
    up = (n == '<');
    

Jeśli jest jednak jeszcze lepszy sposób, chętnie się dowiem.

1
komentarz 28 września 2022 przez Great Stary wyjadacz (12,360 p.)

Wczytywanie danych i nazywanie zmiennych możesz poprawić:

#include <cctype>
#include <iostream>
#include <string>

int main() {
	std::string line;
	bool insideTag = false;
	while (std::getline(std::cin, line)) {
		for (auto& chr : line) {
			if (chr == '<')
				insideTag = true;
			if (chr == '>')
				insideTag = false;
			if (insideTag) 
				chr = std::toupper(chr);
		}
		std::cout << line << "\n";
	}
}

Można zamienić ify na operatory warunkowe na jedną, lub dwie linie kodu. IMHO czytelny i prosty kod jest lepszy niż zbytnio skrócony i składniowo przesadzony.

             insideTag = (chr == '<' ? true  : insideTag);
			insideTag = (chr == '>' ? false : insideTag);
			if (insideTag) {
				chr = std::toupper(chr);
			}

 

komentarz 28 września 2022 przez Sławomir Michajlidis Użytkownik (740 p.)
No faktycznie prościej. Widzę też dodanie referencji, ekstra, dziękuję za pomoc, pozdrawiam.
1
komentarz 7 listopada 2022 przez TOWaD Mądrala (6,000 p.)

Sorki za odgrzewanie ale getline(input,string,znak_przerywający) ma 3 argument. Może na SPOJa  za wolne, ale przydatne. Przykład.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 195 wizyt
pytanie zadane 27 maja 2017 w C i C++ przez redie Obywatel (1,490 p.)
0 głosów
1 odpowiedź 395 wizyt
pytanie zadane 17 października 2022 w C# przez Freak44 Początkujący (300 p.)
0 głosów
1 odpowiedź 828 wizyt
pytanie zadane 21 kwietnia 2020 w C i C++ przez saju13013 Nowicjusz (230 p.)

92,634 zapytań

141,505 odpowiedzi

319,883 komentarzy

62,015 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!

...