Ok...ikke kommatal, så bliver det lidt nemmere. Og hvis vi kan "kræve" at man man heller ikke kan skrive "x + 7" men skal skrive en eksplicit faktor for x...altså "1x + 7", så bliver det lidt nemmere.
Du skal så søge en streng igennem, og vurdere hvert tegn et ad gangen. Det starter med et tal...altså en række decimaler med et muligt fortegn. Tallet afsluttes når du kommer til et X hvorefter der kommer et antal (muligvis nul) mellemrum efterfulgt af et + eller minus efterfulgt af et antal mellemrum efterfulgt af en række decimaler (muligvis med et foranstillet fortegn).
Dvs. du skal have to tal, som kan initialiseres til 0. Det ene er en faktor på X, det andet er addenden.
Det bliver nemmere hvis disse to tal altid ses som værende positive, men kan ganges op med enten 1 eller -1 alt efter om du så et minus til start, så start med følgende:
- int xScale = 0, addend = 0;
- int xScaleSign = 1, addendSign = 1;
Hvis du så ser et minus tegn inden du skal til at læse tallet foran X, så ændrer du xScaleSign til -1.
Når du så læser tallet, så ganger du xScale op med 10 og lægger decimalen til. Det gør du sålænge der er flere decimaler. Altså noget i stil med dette:
- char * str = "5314", * c;
- int number = 0, sign = 1;
- c = str;
-
- /* Read sign */
- if (*c == '-') {
- sign = -1;
- c++;
- }
- while (*c >= '0' && *c <= '9') {
- number *= 10;
- number += *c - '0';
- c++;
- }
-
- number *= sign;
Ovenstående burde læse tallet fra strengen og konvertere det til binær repræsentation, som er lettere at arbejde med. Koden tillader et minus som fortegn men ikke et eksplicit plus...det kan du jo selv tilføje.
Prøv selv at lave resten på samme måde, og spørg så igen, hvis du går i stå.