1 回答

TA贡献1883条经验 获得超3个赞
让我的评论成为答案:
不要同时使用所有的[++b]and索引和递增。[b++]它使代码更难阅读并且更容易出错,就像您的情况一样 - 删除最后一个b++(继续之前的那个)可以解决问题(见下文)。我更喜欢在命令之后使用索引和增量(对于++b)
工作代码:
var a=String.raw`(0.34+4+5.5++4() )`
function tokenizer(a){var b=0;d=[];e="";
while(b<a.length){var c=a[b];
if(c=="+"){d.push("+");c=a[++b];continue;}
if(c=="("){d.push(c);b++;continue;}
if(c==")"){d.push(c);b++;continue;}
if(c==" "||c=="\n"||c=="\t"){b++;continue;}
if(/[0-9.]/.test(c)==true){while(/[0-9.]/.test(c)==true){e+=c;c=a[++b]};d.push(e);e="";continue}
}
return d;
}
console.log(tokenizer(a))
输出:
[
'(', '0.34', '+',
'4', '+', '5.5',
'+', '+', '4',
'(', ')', ')'
]
我认为还可以使代码更清晰:
缩进并将代码拆分为更多行,每行一个命令
使用有意义的变量名。同样,您节省了一些空间和写作,但代价是代码的可读性较差。并因此以更困难的调试为代价:-)
添加回答
举报