Jag har en sträng med uttrycket. Parsning: Förtydligar mitt förslag lite grand: i visual basic funderingen e c o c++ medfunderingar angående strängar
345 + 23 - 34
då e min fundering hur jag får talet 345 till en plats i en vektor
visst kan ja ta bit för bit at strängen .
gör ja det svårare för mig själv
har för mig att ja kan copiera strängar i c++.
vill inte att nån idiotförklarar mig nu
vill inte ha nån färdig kodsnutt utan en pusselbit så ja kan fösöka själv o kommer ja inte på det så då kan ja fråga.Sv: funderingar angående strängar
Tolka tecknens i strängen ett och ett...
3 => Siffra, vi fortsätter
3 4 => Siffra, vi fortsätter
34 5 => Siffra, vi fortsätter
345 + => Nu kom ett ickenumerisk tecken alltså är 345 hela talet, spara undan det,
2 => Siffra...
2 3 => Siffra
23 - => Nytt ickenumeriskt tecken, spara undan 23...
o s v
En annan lösning:
Splitta strängen på + genom att använda funtionen Split. Nu får du en arrray med 2 strängar "345" och "23-34".
Gå igenom dessa strängar i en loop och splitta på minustecken.
345 är numeriskt så det går inte att splitta
23-34 blir till 23 och 34
Gör du detta rätt, så kan du tolka den på detta sätt, men detta sätt blir fort otympligt när * och / och andra matematiska operationer kommer in i strängen.
Den första lösningen är nog rätt väg att gå om du håller på med en matematisk parser/miniräknare av något slag, då lösningen inte kollapsar när problemets komplexitet ökar.Sv:funderingar angående strängar
Vad du i princip behöver göra är att bygga en liten tillståndsmaskin i koden : <url>http://en.wikipedia.org/wiki/Finite_state_machine</url>
Tillstånd 0:
Starttillstånd.Börja med att titta på första tecknet.
Om detta är en siffra mellan 1 och 9 så hoppar du till tillstånd 1.
Om detta är siffran 0 så är talet ogiltigt då ett tal inte skall börja på noll (förutsätter heltal), hoppa till tilstånd 99 (feltillstånd)
Om detta är ett minustecken så är det ett negativt tal, hoppa till tillstånd 2
Alla andra tecken går till tillsåtnd 99 då de är ogiltiga
Tillstånd 1:
Vi är nu inne i ett tal som börjat på en siffra 1-9, titta på nästa tecken
Om 0-9 så fortsätter talet, gå till tillstånd 1 igen
om + eller - så avslutas talet, gå till tillstånd 3
Tillstånd 2:
Negativt tal påbörjat (minustecken). Titta på nästa tecken...
Om detta är en siffra mellan 1 och 9 så hoppar du till tillstånd 1.
Om detta är siffran 0 så är talet ogiltigt då ett tal inte skall börja på noll (förutsätter heltal), hoppa till tilstånd 99 (feltillstånd)
Alla andra tecken går till tillsåtnd 99 då de är ogiltiga
Tillstånd 3:
Ett tal har avslutats, parsa det och hoppa till tillstånd 0 igen....
Detta är säkert inte helt korrekt, men ungefär så går tänket, och det görs lämpligen med en loop och en Select/Switch-satsSv: funderingar angående strängar
En idé som ja hade var att ja har 3 vektorer
en formelvektor
en tempvektor
samt en beräkningsvektor
först skriver ja in uttrycket till exempel
345 + 23 -2
sen kollar ja vad som är tal
det som e tal för ja över till tempvektorn
det som hamnar i tempvektorn först e talet
när talet e flyttat till tempvektorn så kopierar ja hela strängvektorn till
en plats i beräkningsvektorn
när ja flyttat talet till tempvektorn o det inte e nåt mer tecken som ska användas i tempvektorn
så flyttar ja resten av tecknena i formelvektorn
när ja har flyttat allat så det hamnat i beräkningsvektorn kommer det att se ut så här
ber(0) 345
ber(1) +
ber(2) 23
ber(3) -
ber(4) 2Sv:funderingar angående strängar
kan du rekomendera nån bra bok
/ Tobben