使用js對來判斷一個字符串中括號是否平衡匹配


序言:早上起來,按照昨天的計划,看數據結構,上課期間沒學習好,這不去公司培訓了,發現其重要性,趁做畢業設計的時間好好的學習一些基礎知識。

不得不說的是對於軟件的童鞋來說,基礎仍然是重要的。

 

不多說,進入正題,在看數據結構遇到的一個問題,其問題是:

判斷一個字符串中圓括號是否平衡並喬好匹配。

我的思路:當我遇到一個問題的時候,我就開始分析這個問題,深入了解這個問題,常做的事就是在紙上畫畫寫寫。

1.要知道左右括號要匹配必須左括號的個數是等於右括號個數,這就是解決該問題的算法。

2.要判斷一個字符串中括號是否匹配那就得讀取每一個字符串,得使用到js中的String對象中的一個方法charAt(i)。

3.通過循環讀取字符串中的每一個字符,判斷字符是左括號,則leftNum++;如果是右括號,則leftNum--。

4.最后通過leftNum是否為零來判斷左右括號是否平等。

 

以下是我使用js實現的代碼:

// isBracketBalance(str)函數是一個用於判斷字符串中括號是否平衡匹配的函數
    // @prarmeter: str是將要被判斷的字符串
    // 如果匹配返回true
    // 如果不匹配則返回false
    function isBracketBalance(str)
    {
        var leftBracketNum = 0,  // 用於保存左括號個數的變量
            strLength = str.length; // 把字符串的長度付給一個變量增加程序的性能
            
        // 通過for循環來讀取字符串中的一個一個的字符
        for(var i = 0; i < strLength; i++)
        {
            var temp = str.charAt(i); // 付給臨時變量增加程序的性能
            if(temp === '(') // 如果是左括號,則leftBracketNum++
            {
                leftBracketNum++;
            }
            if(temp === ')') // 如果是右括號,則leftBracketNum--
            {
                leftBracketNum--;
            }
        }
        
        // 最后判斷leftBracketNum,如果為0表示平衡否則不平衡
        if(leftBracketNum === 0)
        {
            return true;
        }else{
            return false;
        }
    }

 

 

 

當寫完以上代碼后,我想做做測試,不得不人工的寫個字符串來測試,這很麻煩,我就想到自動化(我也是剛學,也不知這是不是自動化)  

思路:使用js的隨機函數,從而隨機的取左括號或者右括號,拼湊成一個字符串,調用isBracketBalance(str)函數。

以下是我使用js寫的自動化測試isBracketBalance(str)的代碼:

// 自動化測試
    // 寫一個隨機的只包括括號的字符串
    // 其個數也是隨機的,自動化測試100遍
    // 打印出測試過程中不匹配的字符串
    function autoTest()
    {
        var errorNum = 0; // 用於保存錯誤個數
        // 自動化測試100遍
        for(var i = 0; i < 100; i++)
        {
            var len = Math.floor(Math.random()*100), // 字符串取0~100之間的任意長度
                str = []; // 用於保存隨機取得的括號,最后作為測試的對象
                 
            // for循環取括號的隨機值
            for(var j = 0; j < len; j++)
            {
                if(Math.floor((Math.random()*100)) % 2 == 0)
                {
                    str.push('(');
                }else{
                    str.push(')');
                }
            }
            
            str = str.join('');
            if(isBracketBalance(str) == false)
            {
                console.log(str);
                errorNum++;
            }
        }
        console.log(errorNum);
    }

 

遇到的問題:autoTest()局限性,測試的數量是有限的,測試為什么絕大多數是false。

測試的打印結果:

 

 

感悟:每天使用自己熟練的program language去解決一個問題,我覺得這是編程提升的一個方法。深入的挖掘將是更進一步的提升。我發現c++能做更多的事,能更方便的做事,這使得我更加的想多學學c++知識。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM