string parsing
Okay, in a game I''m making, the player inputs a command like "move n,10" which is move north 10. How would I parse it in C++? I tried using counters and string arrays, checking for a letter, if it''s there check for the next letter and so on. I know it''s clunky, but could someone enlighten me on a better way?
[ADD CHEESY POEM OR METALICCA SONG LYRICS HERE]
How many commands do you got? If you have a very limited num. of commands consider making them simple cases
Case 1 = Move n,1 ;
Case 2 = Move n,2 ;
where you check case n aginst your input string.
Other than that you have to write a simple parser.
In theory first you have to define a grammar. In reallife you have to "separate" the diffrent elements of your grammar/instring then parse them.
Like this:
A = "Move"
B = "n"
C = "1";
to split up the instring use spaces, commas etc to detect a new syntactic particle.
Then, let''s say you defined a simple grammar like this
EXP = A->B->C
This could mean that:
A always be a "Command Type"
B is always one of four directions (n,s,w,e)
C is always an integer.
that gives you a simple grammar like this:
Valid Exp:
CMD -> Direction -> Integer
in reality:
if CMD then Direction
if Direction then integer
return IsValidExp
where CMD = {MOVE, EAT, WALK, JUMP, SURFGAMEDEV}
DIRECTION {EAST,E,NORTH,N,SOUTH,S}
INTEGER {1..100}
Parsers are not that complex as they may seem. What makes them kinda hard to get is getting used to the notation used when defining a grammar. Also the most common parser is called a "recursive descent" parser...which parses a string in a recursive manner. And as you may know recursive algorithms can be a real b*tch...
Parsers are a big thing in cs...the www is flooded with stuff about how to write and design em''.
Case 1 = Move n,1 ;
Case 2 = Move n,2 ;
where you check case n aginst your input string.
Other than that you have to write a simple parser.
In theory first you have to define a grammar. In reallife you have to "separate" the diffrent elements of your grammar/instring then parse them.
Like this:
A = "Move"
B = "n"
C = "1";
to split up the instring use spaces, commas etc to detect a new syntactic particle.
Then, let''s say you defined a simple grammar like this
EXP = A->B->C
This could mean that:
A always be a "Command Type"
B is always one of four directions (n,s,w,e)
C is always an integer.
that gives you a simple grammar like this:
Valid Exp:
CMD -> Direction -> Integer
in reality:
if CMD then Direction
if Direction then integer
return IsValidExp
where CMD = {MOVE, EAT, WALK, JUMP, SURFGAMEDEV}
DIRECTION {EAST,E,NORTH,N,SOUTH,S}
INTEGER {1..100}
Parsers are not that complex as they may seem. What makes them kinda hard to get is getting used to the notation used when defining a grammar. Also the most common parser is called a "recursive descent" parser...which parses a string in a recursive manner. And as you may know recursive algorithms can be a real b*tch...
Parsers are a big thing in cs...the www is flooded with stuff about how to write and design em''.
______________________________Only dead fish go with the main-stream.
I don''t use them, but I remember there are some commands that only read in one word, and stop at a space. You could use those (fin, or something like that?) and the strcmp function to check commands also.
Just figured I''d present another option. Hopefully I''m not too inaccurate.
-Arek the Absolute
Just figured I''d present another option. Hopefully I''m not too inaccurate.
-Arek the Absolute
-Arek the Absolute"The full quartet is pirates, ninjas, zombies, and robots. Create a game which involves all four, and you risk being blinded by the sheer level of coolness involved." - Superpig
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement