119. 创建一个tokenizer

中等难度  -通过 / -执行

Given a character sequence and a defined document unit, tokenization is the task of chopping it up into pieces, called tokens , perhaps at the same time throwing away certain characters, such as punctuation. (ref)

对于字符处理的任务,在很多情况下,我们都被要求按照特定规则去解析字符串然后返回结果。

比如,我们需要得出如下计算式的结果:

 1 * (20 -   300      ) 

在进行具体的计算之前,我们首先需要取得各个 "关键词"(tokens) 并且忽略空格,比如:

'1','*', '(', '20', '-', '300', ')'

然后我们就可以比较容易的进行具体处理了。

请实现一个简单四则运算的tokenize() ,像如下这样工作:

const tokens = tokenize(' 1 * (20 -   300      ) ')


while (true) {
  let token = tokens.next()
  if (token.done) {
    break
  }
  console.log(token.value)
}

or you can use for ... of

for (let token of tokens) {
    console.log(token)   
}

因为实现不困难,在实际的面试中,你可以和面试官交涉说最后再实现tokenizer,这样你可以留下更多时间处理重要的逻辑。

输入

  1. 输入的字符串只包括非负整数字符和+、-*/() 和空格,空格需要忽略。
  2. 你的实现需要返回 Generator

始终思考更好的解决办法

(1)
(37)