Javascript 不正确地返回true
红细胞挑战赛7 有人能帮忙吗?下面的函数应该检查字符串中的每个字母是否都有“+”和两边,如果字母不以+”为界,则返回true和false。但是当我传递下面的字符串时,它传递true,当它应该是false时,因为k在右边没有a+。提前谢谢Javascript 不正确地返回true,javascript,algorithm,Javascript,Algorithm,红细胞挑战赛7 有人能帮忙吗?下面的函数应该检查字符串中的每个字母是否都有“+”和两边,如果字母不以+”为界,则返回true和false。但是当我传递下面的字符串时,它传递true,当它应该是false时,因为k在右边没有a+。提前谢谢 str = '+f+++l+k=+' alpha = 'abcdefghijklmnopqrstuvwxyz' function SimpleSymbols(str) { str = str.toLowerCase() for (i=0 ; i<
str = '+f+++l+k=+'
alpha = 'abcdefghijklmnopqrstuvwxyz'
function SimpleSymbols(str) {
str = str.toLowerCase()
for (i=0 ; i<str.length ; i++) {
if (alpha.indexOf(str.charAt(i)) > 0 && i === 0) {
return false
}
else if (alpha.indexOf(str.charAt(str.length -1)) > 0) {
return false
}
else if (alpha.indexOf(str.charAt(i)) > 0 &&
(str.charAt(i-1) !== '+' || str.charAt(i+1) != '+')) {
return false
}
else {return true}
}
}
作为替代解决方案: 您可以使用以下逻辑: 计算字母的数量和两侧带+的字母的数量。如果两者相等,则返回true,否则返回false
作为替代解决方案: 您可以使用以下逻辑: 计算字母的数量和两侧带+的字母的数量。如果两者相等,则返回true,否则返回false
每次在第一次迭代时,您的函数都会中断for循环。您只需要在假分支上中断循环。然后只需在for循环后返回true,这意味着在该行之前它不会以false up退出。您的函数每次在第一次迭代时都会中断for循环。您只需要在假分支上中断循环。然后在for循环后返回true,这意味着直到那一行它才以false up退出。这个简单的逻辑如何
str = '+f+++l+k++'
function SimpleSymbols(str) {
str = str.toLowerCase()
for (i=0 ; i<str.length ; i++) {
if (str[i] === '+') {
continue;
}
if (i === 0 || i === str.length - 1) {
return false;
}
if (str[i - 1] === '+' && str[i].match(/[a-z]/) && str[i + 1] === '+') {
i += 1;
continue;
} else {return false;}
}
return true;
}
这个简单的逻辑怎么样
str = '+f+++l+k++'
function SimpleSymbols(str) {
str = str.toLowerCase()
for (i=0 ; i<str.length ; i++) {
if (str[i] === '+') {
continue;
}
if (i === 0 || i === str.length - 1) {
return false;
}
if (str[i - 1] === '+' && str[i].match(/[a-z]/) && str[i + 1] === '+') {
i += 1;
continue;
} else {return false;}
}
return true;
}
如果我们开始讨论替代方案,尽管正则表达式的解决方案要短得多,但使用string.split的版本更具可读性:
function SimpleSymbols(str){
if(str.length === 0) return false;
if(str[0] !== '+' || str[str.length-1] !== '+') return false;
var subs = str.split('+');
for(var i =0; i < subs.length; i++){
if(subs.length > 1) return false;
}
return true;
}
如果我们开始讨论替代方案,尽管正则表达式的解决方案要短得多,但使用string.split的版本更具可读性:
function SimpleSymbols(str){
if(str.length === 0) return false;
if(str[0] !== '+' || str[str.length-1] !== '+') return false;
var subs = str.split('+');
for(var i =0; i < subs.length; i++){
if(subs.length > 1) return false;
}
return true;
}
虽然这是一个简短而优雅的解决方案,但它并没有回答最初关于粘贴代码行为的问题。它没有要求另一种选择哈哈哈!沃瑟斯!你写了两行,花了我15行。美好的谢谢你的帮助,阿米特。@Anthony很高兴你发现它很有用:虽然这是一个简短而优雅的解决方案,但它并没有回答最初关于粘贴代码行为的问题。它没有要求另一种选择哈哈哈!沃瑟斯!你写了两行,花了我15行。美好的谢谢你的帮助,阿米特。@Anthony很高兴你发现它很有用:明白了,CyberDude!谢谢你的帮助,明白了,伙计!谢谢你的帮助,明白了,埃特沙姆!谢谢,知道了,埃特沙姆!谢谢,明白了,基里尔!谢谢,明白了,基里尔!谢谢