簡體   English   中英

字符串比較“ =”!=“ +”,結果不正確

[英]string comparison “=” != “+” , incorrect results

任務是檢查在以下給定條件下字符串結果是true還是false:

如果出現字母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; } 

條件(temp[i-1]!=='+' && temp[i+1]!=='+')如果這兩個字符之前之后的信都沒有加號是唯一的真實。 如果其中之一是加號,則條件為假。

您需要將邏輯和更改為or運算符: (temp[i-1]!=='+' || temp[i+1]!=='+')

背景:德摩根定律

原始條件是一個字母被加號包圍:

temp[i-1] === '+' && temp[i+1] === '+'

if子句中,您測試此條件是否不匹配。 因此,原始條件變為:

!(temp[i-1] === '+' && temp[i+1] === '+')

要使用未等號變成一個條件這一點,你需要應用德摩根定律基本上說,如果你在一個否定因素的邏輯成為反之亦然。 這使得結果變為:

temp[i-1] !== '+' || temp[i+1] !== '+'

 <!-- 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; } 

提示:還要檢查這些字符串,即使它們應該返回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; 
}

注意:正則表達式在這樣的字符串模式匹配方面可以提供很多幫助。

例如,您的整個函數將簡單地成為正則表達式:

function SimpleSymbols(str) {
  return !str.match(/[^+][a-z][^+]/) && str.length > 2;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM