Portál AbcLinuxu, 9. května 2024 16:31


Dotaz: Nacteni matematickeho vyrazu do pole stringu [c++]

Bundas avatar 19.8.2014 16:57 Bundas | skóre: 14 | Pardubice
Nacteni matematickeho vyrazu do pole stringu [c++]
Přečteno: 225×
Odpovědět | Admin
Ahojte vsichni. Posledni dobou se snazim prijit na pro mnohe z vas urcite jednoduchou vec. Potrebuju napr. tento matematicky vyraz: 2 * 0 + 333 / 50 / 0 - 5 = nacist do pole stringu (co index, to znak (napr pole[2] == 0, pole[4] == 333 atd)). Nevite nekdo jak to udelat? zkousel sem spoustu veci.. napr toto:

string matematicky_vyraz[100];
ofstream soubor;
soubor.open("dafuq", ios::in);
int a =0;
while(true){
soubor >> matematicky_vyraz[a];
if(matematicky_vyraz[a].compare("=") == 0) break;
a++;
}
soubor.close();

predem diky za pomoc
Abe the Messiah has come.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Bundas avatar 19.8.2014 17:39 Bundas | skóre: 14 | Pardubice
Rozbalit Rozbalit vše Re: Nacteni matematickeho vyrazu do pole stringu [c++]
Odpovědět | | Sbalit | Link | Blokovat | Admin
ted sem si vsiml, ze tady mam ofstream místo ifstream. V programu to mam napsane spravne.
Abe the Messiah has come.
19.8.2014 17:43 MadCatX
Rozbalit Rozbalit vše Re: Nacteni matematickeho vyrazu do pole stringu [c++]
Odpovědět | | Sbalit | Link | Blokovat | Admin
Předpokládám, že nechceš každý znak jako jeden prvek v poli, ale každý člen a operátor jako jeden prvek v poli? To je celkem jednoduché. Načteš celý výraz do stringu, pojedeš znak po znaku. Mezery přeskočíš, číslice budeš přidávat do pomocného stringu, a když narazíš na znak matematického operátoru, parsování přerušíš. Pomocný string uložíš do pole (v C++ bys měl daleko spíš použít std::vector). Tohle budeš opakovat, dokud nenarazíš na "=". Není mi úplně jasné, k čemu je tohle dobré, sice ten výraz rozsekáš na kousky, ale stejně je pak budeš muset projít všechny znova, převést členy na čísla, vyřešit prioritu operátorů, atd... Já bych to asi parsoval a rovnou vyhodnocoval nějak rekurzivně.

Jinak "správně" se infixové matematické výrazy parsují třeba takto: http://en.wikipedia.org/wiki/Shunting-yard_algorithm Tím se výraz převede na postfixový, který se strojově vyhodnocuje jednodušeji.
Bundas avatar 19.8.2014 17:52 Bundas | skóre: 14 | Pardubice
Rozbalit Rozbalit vše Re: Nacteni matematickeho vyrazu do pole stringu [c++]
jak mam nacist cely vyraz do stringu?
Abe the Messiah has come.
19.8.2014 19:33 Sten
Rozbalit Rozbalit vše Re: Nacteni matematickeho vyrazu do pole stringu [c++]
19.8.2014 19:32 Sten
Rozbalit Rozbalit vše Re: Nacteni matematickeho vyrazu do pole stringu [c++]
Pokud jde o to jej vyčíslit a nejsou tam proměnné, může být jednodušší to rozparsovat na haldu (strom) tak, že operátor s nejnižší prioritou bude navrchu a pod ním operátory s vyšší prioritou, v listech potom samotné hodnoty. Vyčíslení se provede rekurzí.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.