C語言 驗證花括號成對出現

2021-07-14 13:31:35 字數 1677 閱讀 9668

編寫乙個程式,它從標準輸入(終端)讀取c源**,並驗證所有的花括號都正確的成對出現。

注意:你不必擔心注釋內部、字串常量內部和字元常量形式的花括號。

我們先判斷左花括號的數量是否相等。

如果左右花括號數量不等,肯定不成對!

如果左右花括號數量相等,一定就成對嗎???

好像也不一定。

我們來舉例分析一下,左右花括號相等時可能會出現的情況:

1.}}}}(匹配)

2.{}{}{}{}{}(匹配)

3.}}}}}}}}}

接下來我們開始寫分析左右花括號是否匹配的**。

根據,演算法總結,我們可以設定兩個int型變數left和right,分別用來記錄左花括號的數量和右花括號的數量。

如果遇到左花括號,則left++;

如果如果遇到右花括號,我們首先得判斷左花括號的數目是否大於右花括號,right++;否則直接退出。?

//定義乙個整型變數用來接收控制台資料

int ch = 0;

//定義乙個整型變數用來計算左花括號數目

int left = 0;

//定義乙個整型變數用來計算右花括號數目

int right = 0;

//提示資訊

printf("請輸入一段字元以ctrl+z結束:\n");

//從控制台讀入字元並判斷是否滿足迴圈條件。

while((ch=getchar())!=eof)

//遇到右花括號

if(ch=='}')else}}}}}}}}

}}//如果程式能走到這裡

//就已經排除}}}}else

最終的完整的**如下:?

#includeint main()

//遇到右花括號

if(ch=='}')else}}}}}}}}}}

//如果程式能走到這裡

//就已經排除}}}}else

return0;

}

寫到這裡,好像就已經結束了?

其實....並沒有!

在上述程式中,我們用了兩個變數left和right來記錄左右花括號數目。

其實,我們並不需要知道left和right具體的值.

因此,我們可以用乙個變數來記錄左右花括號的狀態.

我們定義乙個整型變數count.

如果遇到左花括號,count++;

如果遇到右花括號,判斷count是否大於0,如果是count--,否則直接退出.

最終**如下:?

#includeint main()

//遇到右花括號

if(ch=='}')else}}}}}}}}}}

//如果程式能走到這裡

//就已經排除}}}}else

return0;

}

看了本篇文章,如果你還不會如何用c語言來驗證花括號是否成對.....

擴充套件閱讀

scanf()函式功能、原型、用法和例項

getchar()函式功能、原型、用法及例項

gets()函式功能、原型、用法及例項

驗證大小中括號是否成對閉合匹配

valid parentheses example 1 input output trueexample 2 input output falseexample 3 input output true使用棧 先進後出 如果遇到左邊符號,入棧,如果遇到右邊符號,則判斷棧頂元素是否匹配,不匹配則返回fa...

C 實現括號的成對匹配

專案中碰到的問題,用正則不是很好弄,就找了個演算法簡單實現了一下。具體問題就是判斷乙個表示式的括號是否成對出現,不僅要成對出現而且要正確的成對出現 表示式 雖然成對出現但是不正確哦!演算法描述 棧空間儲存,遍歷表示式,遇左括號做進棧操作,遇右括號則對比當前符號和棧頂符號是否匹配,若匹配則做出棧操作,...

棧應用 判斷字串中括號是否成對出現

利用棧先將後出的特性,判斷字串中的數字表示式括號是否成對匹配,如果沒有給出錯誤位置資訊提示。思路很簡單,如果是左括號將左括號 就入棧,遇到右括號 棧中的左括號出棧。如果該出棧的時候,棧空 肯定匹配錯誤。還有就是表示式遍歷完畢,我們的棧 如果是全部匹配成功 棧肯定為空,不為空 匹配錯誤!這裡我們使用之...