亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我正在嘗試制作一個小型分詞器

我正在嘗試制作一個小型分詞器

搖曳的薔薇 2023-02-17 10:22:01
我正在嘗試在 js 中制作一個 tokenzir,但我注意到結果中沒有包含“+”,因為我想要這段代碼中的錯誤是什么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="";b++;continue}}return d;}console.log(tokenizer(a))//result =["(", "0.34", "4", "5.5", "+", "4", ")", ")"]我希望你的結果 ["(", "0.34","+", "4","+", "5.5","+, "+", "4", ")", ")"]
查看完整描述

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',

  '(', ')',    ')'

]


我認為還可以使代碼更清晰:


縮進并將代碼拆分為更多行,每行一個命令

使用有意義的變量名。同樣,您節省了一些空間和寫作,但代價是代碼的可讀性較差。并因此以更困難的調試為代價:-)


查看完整回答
反對 回復 2023-02-17
  • 1 回答
  • 0 關注
  • 90 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號