任务是检查字符串结果是对于以下给定条件是真还是假:
如果出现字母a到z,则必须有' +'在特定字母之前和之后 这种情况很好,期待' ='来信之前或之后。 为什么这种情况对于' =' ? 此代码对这些字符串返回true 感谢
function SimpleSymbols(str) {
var temp=str.split("")
if(temp.length==1 || temp.length==2 )
return false;
for(i=0;i<temp.length;i++){
if(temp[i]>='a' && temp[i]<='z'){
if(i===0 || i===(temp.length-1)||
(temp[i-1]!=='+' && temp[i+1]!=='+')){
return false;
}
}
}
return true;
}
&#13;
答案 0 :(得分:2)
条件(temp[i-1]!=='+' && temp[i+1]!=='+')
仅在字母后面的和之前的字符都不是加号时才为真。如果其中一个是加号,则条件为假。
您需要更改逻辑和运算符:(temp[i-1]!=='+' || temp[i+1]!=='+')
最初的条件是一个字母被加号包围:
temp[i-1] === '+' && temp[i+1] === '+'
在您的if
子句中,您测试此条件不匹配。因此,原始条件变为:
!(temp[i-1] === '+' && temp[i+1] === '+')
要使用not-equals将其转换为条件,您需要应用De Morgan's Laws,这基本上表示逻辑和成为或,而且 - 如果你考虑到否定,则相反。这导致了最终条件:
temp[i-1] !== '+' || temp[i+1] !== '+'
答案 1 :(得分:2)
<!-- I think you should change the condition operator -->
function SimpleSymbols(str) {
var temp=str.split("")
if(temp.length==1 || temp.length==2 )
return false;
for(i=0;i<temp.length;i++){
if(temp[i]>='a' && temp[i]<='z'){
if(i===0 || i===(temp.length-1)||
(temp[i-1]!=='+' || temp[i+1]!=='+')){
return false;
}
}
}
return true;
}
&#13;
答案 2 :(得分:1)
提示:检查这些字符串,即使它们应该返回false,它们都返回true。
"+a4"
"1a+"
"%a+"
让我们简化你的条件:
str[i-1] !== '+' && str[i+1] !== '+'
与
相同!(str[i-1] === '+' || str[i+1] === '+')
这样可以更轻松地查看您的确切内容。
我们现在可以看到,只有当这两个字符都不是str[i-1] !== '+' && str[i+1] !== '+'
时,条件+
才会返回true。
如果至少有一个不是+
,您希望它返回true。所以你应该使用它:
str[i-1] !== '+' || str[i+1] !== '+'
我在这里用这个正确的条件重写你的代码:
function SimpleSymbols(str) {
if (str.length == 1 || str.length == 2) return false;
for (var i = 0; i < str.length; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
if (i === 0 || i === (str.length-1) || (str[i-1] !== '+' || str[i+1] !== '+')) {
return false;
}
}
}
return true;
}
注意:正则表达式可以在像这样的字符串中使用模式匹配帮助很多。
E.g。你的整个功能只会变成正则表达式:
function SimpleSymbols(str) {
return !str.match(/[^+][a-z][^+]/) && str.length > 2;
}