你试图解析你的字符串?我猜想你会试图对输入流进行词法分析(扫描)。
- 您可以通过构建strtok和字符lookahead/pushback来手动扫描扫描仪。
- 你可以使用了像lex或弯曲,以建立一个词汇扫描器
- 你可以做一个可怜的男人的解析器一系列的正则表达式和case语句
假设你希望来标记你的代数串。您需要定义一个语法以及您想要识别的标记。你需要像BNF(Backus-Naur Formalism)这样的东西,或者你可以使用'铁路语法图'(我个人更喜欢BNF,但有些人喜欢铁路图)。
这里是一个开始:
expression --> sexpr | nil
parenexpr --> '(' sexpr ')'
sexpr --> parenexpr | addexpr | thing | nil
addexpr --> mulexpr addop mulexpr | mulexpr
mulexpr --> parenexpr
thing --> symbol | integer | real | scientific
integer --> { '+' | '-' }? digit+
real --> { '+' | '-' }? digit+ { . digit+ }?
scientific --> { + | - }? digit+ { . digit+ } e { '+' | '-' }? digit+
addop --> '+' | '-'
mulop --> '/' | '*' | '^' | '%'
relop --> '||' | '&&' | '!'
symbol --> { character | '_' } { character | '_' | digit }*
digit --> [0-9]
character --> [A-Za-z]
//etc
这意味着什么,是每个项目的语法产生符号左侧( - >)扩展到的右侧的事情之一。请注意,这个定义是递归的,它使您能够了解您需要的编程类型。无论如何,您需要扫描并识别每个令牌以收集要提取的整数,实际,科学,符号,addop,mulop,relop和任何其他令牌。一路走来,您需要决定如何处理空白(制表符,空格,换行符)和其他未定义的符号。
将'-'放在开头或结尾。 –
没有帮助:(如何解决这个问题btw? – adne
谢谢德里曼尼斯 – adne