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

Porównywanie Stringów C++ - Problem z Warunkiem Logicznym

0 głosów
1,206 wizyt
pytanie zadane 7 lutego 2016 w C i C++ przez Dywan Nowicjusz (170 p.)

Zmagam się z dość poważnym problemem w moim programie. Piszę w C++ kalkulator dla dużych liczb. Chciałem teraz napisać funkcję dla liczenia SIlnii. Można powiedzieć, że udało mi się to zrealizować, jednak chciałem lekko zrefaktoryzować mój kod.
 

string Silnia(string a)
{
   Filtruj(a); // Po prostu pozbywam się zer na początku a = 0010, a = 10;

   // ZMIENNE
   string wynik = a;

   if (wynik == "0") // 0! = 1
      return "1";

   // SILNIA
   while (a > "2") // ZLY WARUNEK
   {
      a = Odejmowanie(a, "1"); // Moja funkcja do odejmowania
      wynik = Mnozenie(wynik, a); // Moja funkcja do mnożenia
   }

   // WYPISUJEMY WYNIK

   return wynik;
}



Chciałem teraz zrobić tak, aby dla wartosc
0! = 1
1! = 1
2! = 2
3! = 6 <-- dopiero tutaj wchodzę do pętli i wykonuje mnożenie.

Chcę po prostu zaoszczędzić trochę na czasie jak i na ilości operacji, aby nie wykonywać tych trywialnych obliczeń, które i tak nic nie zmienią. Chyba dobrze?

Problem stanowi ta linijka while (a > "2"), nie wiem dlaczego nie chce to chodzić tak jak sobie założyłem. Co ciekawe dla while (a > "1") jest już wszystko w porządku. Mogę co prawda to obejść warunkiem while (a != "2") ale wtedy muszę specjalnie obsłużyć wyjątek dla 1! = 1, bez tego wynik 1! = 0;

Co wykonuje źle? CodeBlox mi nie pomaga, debbuger nie działa na stringach, mówiąc, że są niezoptymalizowane.

1 odpowiedź

0 głosów
odpowiedź 7 lutego 2016 przez niezalogowany
Prosta sprawa: nie przeczytałeś dokumentacji, tu leży błąd

http://www.cplusplus.com/reference/string/string/operators/
komentarz 7 lutego 2016 przez Dywan Nowicjusz (170 p.)

No niby jest to co potrzebuję

bool operator>  (const string& lhs, const string& rhs);

Jednak nie rozumiem jak tego użyć :(

komentarz 7 lutego 2016 przez niezalogowany
komentarz 7 lutego 2016 przez Dywan Nowicjusz (170 p.)
Coś nadal nic. Nie widzę w tym powiązania z moim problemem :(
Próbowałem zrobić tak: while (a.compare("2") > 0)
Też nic to nie pomoga.
komentarz 8 lutego 2016 przez Dywan Nowicjusz (170 p.)
Dobra. Poradziłem sobie w inny sposób zrobiłem konwersję ze stringa na int. Następnie zbudowałem inne warunki logiczne i teraz wszystko bardzo dobrze chodzi.

Podobne pytania

0 głosów
1 odpowiedź 580 wizyt
pytanie zadane 5 sierpnia 2016 w C i C++ przez avi1999 Nowicjusz (200 p.)
0 głosów
1 odpowiedź 3,074 wizyt
pytanie zadane 29 grudnia 2018 w Java przez msukiennik Początkujący (380 p.)
0 głosów
1 odpowiedź 773 wizyt
pytanie zadane 5 maja 2018 w PHP przez Hellgrush Nowicjusz (230 p.)

93,742 zapytań

142,680 odpowiedzi

323,299 komentarzy

63,328 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...