我尝试使用javascript创建一个回文程序,即使字符串有标点符号,也会通过 TRUE 或 FALSE 显示字符串是否为回文结构和空间(女士,我是亚当)。但是每当我输入一个字符串时,无论字符串是什么,我都只能得到 TRUE 。这是我的代码,
function isPalindrome (str) {
var nopunctuation = str.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`~()]/g,"");
var nospaces = nopunctuation.replace(/\s/g,"");
var finalstring = nospaces;
var len = finalstring.length;
for ( var i = 0; i < Math.floor(finalstring/2); i++ ) {
if (finalstring[i] !== finalstring[len - 1 - i]) {
return false;
}
}
return true;
}
console.log(isPalindrome("madam i'm adam"));
我的代码有什么问题吗?需要注意的是,我不允许使用任何内置或库功能。你的帮助会非常明显。 TNX。
答案 0 :(得分:2)
在&#34; for&#34;子句,替换&#34; Math.floor(finalstring / 2)&#34; by&#34; Math.floor(len / 2)&#34;
另外,您可能希望改进标点符号删除,以便它也删除撇号。
所以你的代码会变成以下内容:
function isPalindrome (str) {
var nopunctuation = str.replace(/\W/g,"");
var nospaces = nopunctuation.replace(/\s/g,"");
var finalstring = nospaces;
var len = finalstring.length;
for ( var i = 0; i < Math.floor(len/2); i++ ) {
if (finalstring[i] !== finalstring[len - 1 - i]) {
return false;
}
}
return true;
}