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

Zadanie ze spoja, błąd - program przestał działać

Object Storage Arubacloud
0 głosów
291 wizyt
pytanie zadane 19 września 2018 w C i C++ przez Krzych0409 Nowicjusz (230 p.)

Witam

Mam problem z zadaniem https://pl.spoj.com/problems/PTWPZ083/ na Spoju.

Wydaje mi się, że kod jest dobry, ale wyłącza mi program przy wczytaniu działań z klawiatury.

 

#include <iostream>

using namespace std;


int main()
{
    int ile;
    cin>>ile;

    string tab[ile];

    for (int i=0; i<ile; i++)
    {
        cin>>tab[ile];
    }

    int suma[ile];

    for (int i=0; i<ile; i++)
    {
        for (int j=0; j<tab[ile].length(); j++)
        {
            if (tab[i][j]=='-') suma[i]-=tab[i][j+1];
            else if (tab[i][j]=='+') suma[i]+=tab[i][j+1];
        }
            cout<<suma[i]<<endl;
    }

    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 19 września 2018 przez Velta Maniak (52,010 p.)
string tab[ile];

To nie przejdzie. Jeżeli chcesz stworzyć tablicę z dynamicznym rozmiarem, użyj wskaźników:

string * tab = new string[ile];

 

komentarz 20 września 2018 przez Krzych0409 Nowicjusz (230 p.)
Dzięki za wszystkie odpowiedzi, ale czy mozecie mi napisać dlaczego nie może być np. Int tab[ile] skoro program już wie ile wynosi ta zmienna, ponieważ została wcześniej zdefiniowana.
komentarz 20 września 2018 przez niezalogowany

link - zwróć też uwagę na komentarz użytkownika RafalS. 

0 głosów
odpowiedź 19 września 2018 przez RafalS VIP (122,820 p.)
edycja 20 września 2018 przez RafalS
string tab[ile];
int suma[ile];

to nie powinno sie skompilować zgodnie ze standardem. Niektóry kompilatory idą na rękę i to przepuszczaja, ale lepiej unikać i używać dynamicznej alokacji.

    for (int i=0; i<ile; i++)
    {
        cin>>tab[ile];

chciałeś pewnie wpisywać do tab[i].

if (tab[i][j]=='-') suma[i]-=tab[i][j+1];

dodajesz char do inta. Spróbuj czegoś takiego, to zobaczysz w czym jest problem:

int x = '1';
cout<<x<<endl;

I problem jest troszke bardziej złożony niż założyłeś. Co jeśli będzie 1+69. Wtedy Twój algorytm doda sobie 1 do 6, ignorujac 9 i zwróci 7 (po tym jak naprawisz reszte problemów). Ja bym się posłużył klasą stringstream, która wyciągnie Ci całe liczby zamiast pojedyńczych cyfr z tego stringa:

	stringstream s(tab[i]);
	int liczba;
	s >> liczba;

Edit: stringstrem mino wszystko zadziala i sam zajmie sie plusami i minusami :p

komentarz 19 września 2018 przez niezalogowany

Na wejściu nie będzie takich zestawów danych:

Wyrażenie to składa się na przemian z pojedynczych cyfr i znaków + bądź -.

komentarz 20 września 2018 przez RafalS VIP (122,820 p.)
Te zadania maja za dlugie opisy :D

Podobne pytania

0 głosów
1 odpowiedź 356 wizyt
pytanie zadane 11 października 2017 w C i C++ przez jupikajej Początkujący (440 p.)
+1 głos
1 odpowiedź 685 wizyt
pytanie zadane 23 września 2018 w C i C++ przez stones321 Nowicjusz (200 p.)
+1 głos
2 odpowiedzi 326 wizyt
pytanie zadane 16 lutego 2021 w C i C++ przez Informatyk_44 Nowicjusz (150 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

61,938 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!

...