[C++] Hulp met operators uit tekst halen?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb hier een uigebreide C++ opdracht. Het is allemaal vrij complex, zeker omdat de algorithmen die benodigd zijn, niet erg makkelijk zijn.Een van de onderdelen is het halen van de cijfers en de operators uit enkele regels tekst:
code:
1
asdf50fdasPLUasdf 10fdsaMULasdf10


Hier uit moet volgen:
50 + 10 * 10 = 150

Hebben jullie enig idee waar ik hiervoor zou moeten beginnen? Ik heb namelijk geen idee hoe ik de PLU, MUL, DIV, MIN uit de betreffende regels zou kunnen halen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik durf te betwijfelen of die algoritmen "vrij complex" zijn als het gebruik van stringfuncties je niet bekend is ;) Als je eens begint met te tonen wat je al geprobeerd, gezocht, gevonden etc. hebt (zie onze Quickstart) want dat is toch wel een vereiste hier op GoT ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Op basis van wat je laat zien kan ik alleen gokken; je operators zijn allemaal met hoofdletters en alles wat lowercase is mag je negeren? Dan is dat meteen je antwoord:
code:
1
2
3
4
5
    asdf50fdasPLUasdf 10fdsaMULasdf10
wordt
     50 PLU 10 MUL 10
wordt
     150

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

Verwijderd

Als ik zo kijk wordt een "getal" vooraf gegaan door asdf (what ever that means?),
en een operator door fdas.
Hier zou je al eens op kunnen "splitten" en vandaaruit verder kijken.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
MSalters schreef op dinsdag 13 oktober 2009 @ 12:21:
Op basis van wat je laat zien kan ik alleen gokken; je operators zijn allemaal met hoofdletters en alles wat lowercase is mag je negeren? Dan is dat meteen je antwoord:
Mwah, lijke me eerder dat hij bedoelt dat er "random data" op de "whitespace" plaatsen staat, dus dat er tussen getallen en operators "whatever" voor kan komen. Maar het is inderdaad wel handig als TS even vermeldt of operators (bijv.) altijd in uppercase zijn of wat nou precies de eigenlijke samenstelling van de input is.

[ Voor 15% gewijzigd door RobIII op 13-10-2009 12:24 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Van voor naar achter door de string lopen en elke keer als je een "interessant" teken tegenkomt verder kijken of de tekens die erna komen erbij horen.
Het is allemaal vrij complex, zeker omdat de algorithmen die benodigd zijn, niet erg makkelijk zijn.
Ze zijn wellicht voor jou niet erg makkelijk, maar ze zijn er dus wel. Doe er dan ook wat mee. 't Is allemaal niet echt rocket science.
Verwijderd schreef op dinsdag 13 oktober 2009 @ 12:21:
Als ik zo kijk wordt een "getal" vooraf gegaan door asdf (what ever that means?),
en een operator door fdas.
Als je iets beter kijkt zie je dat dat niet klopt ;)

[ Voor 30% gewijzigd door .oisyn op 13-10-2009 12:27 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het gaat inderdaad op randomdata. Het enige dat ik over de randomdata kan zeggen is dat het geen cijfers en/of operators zijn. De randomdata dient eruit te worden gehaald en weg te worden geschreven.

De cijfers en operators moeten gebruikt worden voor een berekening.

Voor de cijfers overweeg ik 'isdigit', maar voor de operators ben ik nog in dubio.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 13 oktober 2009 @ 12:28:
Het gaat inderdaad op randomdata. Het enige dat ik over de randomdata kan zeggen is dat het geen cijfers en/of operators zijn. De randomdata dient eruit te worden gehaald en weg te worden geschreven.

De cijfers en operators moeten gebruikt worden voor een berekening.

Voor de cijfers overweeg ik 'isdigit', maar voor de operators ben ik nog in dubio.
Wat ik me afvraag is, hoe kom je in hemelsnaam aan een uitgeschreven berekening tussen random data ??
Als alles zo random is, hoe kan je dan zeker zeggen dat in fjsdfMULsdhfsdf de MUL er niet random staat ?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het gaat steeds maar om enkele regels, zo'n 1 tot 20 regels per bestand. Daarbij is zelfs de meeste randomdata met lage letters, slechts enkele hoofdletters komen er in voor.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 13 oktober 2009 @ 12:35:
Het gaat steeds maar om enkele regels, zo'n 1 tot 20 regels per bestand. Daarbij is zelfs de meeste randomdata met lage letters, slechts enkele hoofdletters komen er in voor.
Dat is ongetwijfeld gewoon de aard van de opdracht ;)
Het gaat er gewoon om dat je strings leert manipuleren, that's it.

[ Voor 56% gewijzigd door Verwijderd op 13-10-2009 12:36 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Inderdaad. Ik ben actief op Google aan het zoeken en overweeg nu vectors.

In wiskundige zin heb ik geen idee wat vectors is, maar ook niet bij C++. Er zou toch niet verwacht worden van studenten die net 5 weken met C++ bezig zijn, dat ze vectors gaan gebruiken?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Een vector is gewoon een dynamische array. Maar nogmaals, je had het over "complexe algoritmes". Wat zijn die algoritmes dan die je gehad hebt?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 13 oktober 2009 @ 12:38:
Inderdaad. Ik ben actief op Google aan het zoeken en overweeg nu vectors.

In wiskundige zin heb ik geen idee wat vectors is, maar ook niet bij C++. Er zou toch niet verwacht worden van studenten die net 5 weken met C++ bezig zijn, dat ze vectors gaan gebruiken?
Ja.

Maar of je ze hier per se nodig hebt? Wat is er moeilijk aan stap voor stap door de string heen te lopen, scannen of wat je nu aan het lezen bent het begin kan zijn van een getal/operator, kijken hoe ver dat doorloopt en het resultaat toevoegen aan een andere string?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Velvet
  • Registratie: November 2005
  • Niet online
Laat me raden, universiteit Leiden? Klinkt als een opgave van Kosters ;)

Je hoeft inderdaad geen vectoren of strings te gebruiken, alles wat je moet doen is een inputstream openen, daarmee karakter voor karakter het bestand uitlezen, de data die je nodig hebt bewaren en uitvoeren (naar het scherm of een outputbestand), en aan het eind het bestand weer netjes sluiten. Dit kun je allemaal met een #include<fstream> en een include #<iostream>. De stof die je tot nog toe hebt gehad zou voldoende moeten zijn om deze opdracht te maken.

Fujifilm XT-20 | Fuji lenzen | Vintage lenzen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een college gemist over pointers en ben pas twee weken geleden met de studie en C++ begonnen, dus heb nog wat stof in te halen.

Ik denk dat ik de collegesheets nog maar even goed moet doornemen, om tot een goede methode te komen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 13 oktober 2009 @ 12:51:
Ik heb een college gemist over pointers en ben pas twee weken geleden met de studie en C++ begonnen, dus heb nog wat stof in te halen.
Pointers ga je niet eens (bewust) nodig hebben. Mijn vorige post heeft precies beschreven wat je moet doen. String 1 één keer doorlopen en "lezen" wat je nodig hebt, en dat vervolgens naar string 2 wegschrijven.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Je post had ik nog eens gezien, excuses! Ik denk inderdaad dat ik zoals jullie zeggen gewoon een begin ga maken en de regels karakter voor karakter ga inlezen en alles weg ga schrijven naar 1) Operatorregel 2) RandomData-regel en vervlgens op basis van de eerste regel de formule uitwerken.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Aan z'n topicstart te zien moet hij de expressie ook nog eens evalueren, gezien het feit dat "= 150" niet in de input string voorkomt.

.edit: zie je wel :P

[ Voor 7% gewijzigd door .oisyn op 13-10-2009 12:57 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

.oisyn schreef op dinsdag 13 oktober 2009 @ 12:57:
Aan z'n topicstart te zien moet hij de expressie ook nog eens evalueren, gezien het feit dat "= 150" niet in de input string voorkomt.

.edit: zie je wel :P
Als hij de formule eenmaal kan interpreteren is het laatste stukje ook een kleine stap. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik had het dus over het interpreteren. En niet gewoon het "naar output schrijven", want dan hoef je niets te interpreteren. En dan ook nog eens rekening houden met operator precedence kan voor een beginnende programmeur nog best lastig zijn.

[ Voor 32% gewijzigd door .oisyn op 13-10-2009 13:10 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zover ben ik nu... maar het werkt nog niet echt... ik ben pas later bijgesloten bij de klas, slechts 2,5 week geleden. Hebben jullie enig idee waar ik denkfouten maak?

code:
1
//Snip

[ Voor 91% gewijzigd door Woy op 19-10-2009 14:40 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het is dus niet de bedoeling dat je gewoon een hele lap code post, en dat wij maar moeten gaan kijken wat je probleem is.

Je zult eerst zelf moeten debuggen, en je probleem proberen te achterhalen. Als je tegen een probleem loopt is het natuurlijk handig als je een stukje code plaatst wat niet doet wat jij verwacht, maar dat is dus geen hele lap code, maar gewoon een stukje code waar je je probleem isoleert.

Verder kunnen we er natuurlijk weinig mee als je niet eens uitlegt wat je probleem is, maar alleen zegt dat het niet doet wat je verwacht.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Ram0n
  • Registratie: Maart 2002
  • Laatst online: 03-07 13:05

Ram0n

Bierbrouwende nerd

Dit is inderdaad een opdracht van de Universiteit Leiden. Ik zou de TS willen aanraden even op de site van het vak te kijken, want het lijkt erop dat hij/zij de pagina over werkgroep 5 niet gezien heeft. Daar staan uitgebreide tips en een stappenplan voor dit probleem, wat je zeker verder op weg zal helpen.

Overigens zijn pointers nog totaal niet nodig voor deze opdracht.

[ Voor 10% gewijzigd door Ram0n op 19-10-2009 16:43 ]

Eigenaar/brouwer Milky Road Brewery


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Je hebt gelijk, de pagina over werkgroep 5 bevatte veel goede informatie. Helaas ben ik pas twee weken geleden bij de studie aangesloten en heb ik dit gedeelte gemist.

Het herkennen van de operatoren e.d. gaat perfect, ook besef ik me dat op het moment dat ik een + of - tegen kom de vorige bewerking kan verwerken tot een tussenresultaat. Echter heb ik geen idee wat ik steeds moet opslaan en hoe ik met de tegengekomen getallen en operatoren moet omgaan. Op het moment dat ik een lijn heb met:
code:
1
5*5*5*5*5
, dan kan ik echt niet meer gaan werken met laatsteNummer=2, laatsteFactor='8', zeker als het
code:
1
5+5*5*3
wordt, dan kan ik die 5 pas als laatste optellen en heb ik al die tussenliggende factoren moeten opslaan zonder dat ik verder kan bewerken. Ik mag geen arrays of strings gebruiken.

Iemand wees me op het Shunting-Yart algoritme, maar dat wordt helemaal complex.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Maar wat wil je nou precies van ons? Het is niet de bedoeling dat we het hier voor je gaan voorkauwen. Het is ook niet ons probleem dat jij later ingestapt ben in de opleiding.

Mocht je echt problemen hebben met je opdracht, dan moet je gewoon naar je leraar toestappen.

Het is niet erg dat je hier een topic plaatst, maar je eigen input is wel erg mager. Er staat nu gewoon "Het werkt niet, en ik weet ook niet hoe ik het aan moet pakken!"

Als je de expressie al wel goed kunt lezen, maar moeite hebt met het uitrekenen zou je nog naar Wikipedia: Reverse Polish notation kunnen kijken, en hoe je een infix expressie om kan zetten naar RPN.

Maar verder zul je toch echt wat meer moeite moeten doen, en met een concreet programmeer probleem komen. En daarbij uitleggen wat je allemaal geprobeerd hebt, en waarom dat niet wil lukken. Lees ook even De Quickstart.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1