字符串比较" =" !=" +" ,结果不正确

时间:2017-12-09 16:57:30

标签: javascript string

任务是检查字符串结果是对于以下给定条件是真还是假:

如果出现字母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;
&#13;
&#13;

3 个答案:

答案 0 :(得分:2)

条件(temp[i-1]!=='+' && temp[i+1]!=='+')仅在字母后面的之前的字符都不是加号时才为真。如果其中一个是加号,则条件为假。

您需要更改逻辑和运算符:(temp[i-1]!=='+' || temp[i+1]!=='+')

背景:De Morgan的法律

最初的条件是一个字母被加号包围:

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)

&#13;
&#13;
<!-- 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;
&#13;
&#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;
}