1. 程式人生 > >C語言括號匹配【堆疊原理】

C語言括號匹配【堆疊原理】

利用堆疊原理,實現括號匹配,練手程式,沒什麼實際意義,僅供參考。

#include<stdio.h>
#include<string.h>
void main()
{
	int i,len,top=-1;
	char stack[200],brace[100];
	fgets(brace,100,stdin);
	len = strlen(brace)-1;  //end char is '\0'

//	[   ]  (  )  {   }
//  91 93 40 41 123 125 
//	input & output
	for(i=0;i<len;i++)
	{
		if(brace[i]==(char)40||brace[i]==(char)123||brace[i]==(char)91)
		{
			top++;
			stack[top]=brace[i];
		
			printf("input %c\n",brace[i]);
		}
		else if(brace[i]==(char)41 && stack[top]==(char)40)		
		{
			printf("output )\n");
			top--;
		}
		else if(brace[i]==(char)93 && stack[top]==(char)91) 
		{
			printf("output ]\n");
			top--;
		}
		else if(brace[i]==(char)125 && stack[top]==(char)123) 
		{
		    printf("output }\n");	
			top--;
		}
	}	

	if(top==-1)
	{
		printf("\ntop = %d ;output success!\n",top);
	}
}


[email protected]:~/learning/sample code/algrithm/parenthesis_matching$ ./match.o
(1+3*[4/6])+{4*[5+6]}
input (
input [
output ]
output )
input {
input [
output ]
output }

top = -1 ;output success!


相關推薦

C語言括號匹配堆疊原理

利用堆疊原理,實現括號匹配,練手程式,沒什麼實際意義,僅供參考。 #include<stdio.h> #include<string.h> void main() { int i,len,top=-1; char stack[200],brace

C語言 - 氣泡排序演算法優化

氣泡排序很好理解,但是如何能夠讓其更加有效的執行是需要我們一直思考的問題。 本文會使用C語言(部分C++語法)介紹氣泡排序演算法並結合實際情況對齊進行優化,增強其健壯性。 **********************************************************

從零開始教你用C語言編遊戲如鵬

 純真童趣的《泡泡堂》,還有武林情仇,笑傲江湖的《劍俠情緣on line》。它是e時代常談的話題,是互動式娛樂的主力軍,是一種高層次的綜合藝術,更是一個民族的文化,世界觀的全新傳播方式 。作為遊戲玩家的我們,是不是想設計一個屬於自己的遊戲呢? 愛玩是人的天性,而C語言是我們計算機專業都要學習的一門基礎 學科。

資料結構(C語言)---括號匹配

#include <stdio.h> #include <stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10   //分配不同空間只需要更改此處的值,不需動程式裡面的值。 

C語言 括號匹配問題

定義一個計數器用來判斷正反括號的數量,遇見  {  則count+1,當遇見count不為0且當前字元為 } 時,count-- 若count=0且當前字元為 } 時括號一定不匹配,迴圈直到EOF,判

編譯原理利用Flex工具生成C語言詞法分析器

Flex構造C語言詞法分析器 可以識別大部分的C語言關鍵字和識別符號,可以去除註釋(多行單行都可以),可以識別整數和浮點數,可以識別錯誤的浮點數。 lex檔案結構: [第一部分:定義段] /* *按照C語言語法,宣告檔案包含,巨集定義,常數定義,全域性

編譯原理C語言詞法分析器的設計

1.實驗要求輸入為一個以類C語言編寫的源程式輸出為一組二元組序列構成的文字檔案,一行為一個二元組,二元組中間以逗號隔開實驗報告上要求附上DFA 2.語言說明:保留字:unsigned、break、return、void、case、float、char、for、while、co

C語言天天練(二)statickeyword

修飾 weight () main函數 class code keyword spa tail 引言: statickeyword不僅能夠修飾變量。並且能夠修飾函數。了解它的使用方法,不僅對閱讀別人的代碼有幫助,也有助於自己寫出更加健壯的

C語言天天練(三)typedef具體解釋

tar 原因 外部 指向 可用 引入 解釋 trac 兩個 引言: typedef能夠看作type define的縮寫,顧名思義就是類型定義,也就是說它僅僅是給已有的類型又一次定義了一個方便使用的別名。並沒有產生新的數據類型。 typed

洛谷 P1739 表達式括號匹配STL/stack/模擬

stack clu b+ ack 編寫一個程序 輸入輸出格式 turn 是否 algorithm 題目描述 假設一個表達式有英文字母(小寫)、運算符(+,—,*,/)和左右小(圓)括號構成,以“@”作為表達式的結束符。請編寫一個程序檢查表達式中的左右圓括號是否匹配,若匹配,

編譯原理c++實現自下而上語法分析器

不可 acm times style size PC -i 表達式 鏈接 寫在前面:本博客為本人原創,嚴禁任何形式的轉載!本博客只允許放在博客園(.cnblogs.com),如果您在其他網站看到這篇博文,請通過下面這個唯一的合法鏈接轉到原文! 本博客全網唯一合法URL:ht

C語言模擬實現strncpy strncat strncmp

模擬實現【strncpy】 char *my_strncpy(char* dest,char *src,size_t count) { char *ret = dest; assert(dest); assert(src); while(count)

c語言指標學習

  前言   近期俄羅斯的隕石、四月的血月、五月北京的飛雪以及天朝各種血腥和混亂,給人一種不詳的預感。佛祖說的末法時期,五濁惡世 ,十惡之世,人再無心法約束,道德淪喪,和現在正好吻合。尤其是在天朝,空氣,水,食品,你能告訴還有沒有問題的嗎?不知大難至,世人依舊忙。禍福相依,危中有機。那些高階生命,

“棧”的典型應用—表示式求值(C語言實現)

我們都知道算術四則運算的運算規則是: 先乘除,後加減。 從左到右計算 先算括號內,再算括號外 表示式組成 任何一個表示式都有運算元、運算子和界定符組成。 運算元即可以是常量,也可以是被說明為變數或常量的識別符號。 運算子可以分為算術運算,關係運算和邏輯運

C語言從入門到懵逼#1 簡單入門

簡單說明 本文針對接觸過C語言的選手(瞭解hello world程式怎麼寫) 如果有任何意見或建議歡迎在部落格最下面評論,作者會及時反饋並進行更新 文章作者保留權利,如需要任何形式的使用請聯絡作者:

C語言 翁愷·第8周

單詞長度(4分) 題目內容: 你的程式要讀入一行文字,其中以空格分隔為若干個單詞,以‘.’結束。你要輸出這行文字中每個單詞的長度。這裡的單詞與語言無關,可以包括各種符號,比如“it’s”算一個單詞,長度為4。注意,行中可能出現連續的空格。 輸入格式: 輸入在一行中給出一行文字,以

C語言 翁愷·第7周

1多項式加法(5分) 題目內容: 一個多項式可以表達為x的各次冪與係數乘積的和,比如: 2x6+3x5+12x3+6x+20 現在,你的程式要讀入兩個多項式,然後輸出這兩個多項式的和,也就是把對應的冪上的係數相加然後輸出。 程式要處理的冪最大為100。 輸入格式: 總

C語言 翁愷·第5周

1素數和(5分) 題目內容: 我們認為2是第一個素數,3是第二個素數,5是第三個素數,依次類推。 現在,給定兩個整數n和m,0<n<=m<=200,你的程式要計算第n個素數到第m個素數之間所有的素數的和,包括第n個素數和第m個素數。 輸入格式: 兩個整數,第

C語言 翁愷·第4周

1奇偶個數(5分) 題目內容: 你的程式要讀入一系列正整數資料,輸入-1表示輸入結束,-1本身不是輸入的資料。程式輸出讀到的資料中的奇數和偶數的個數。 輸入格式: 一系列正整數,整數的範圍是(0,100000)。如果輸入-1則表示輸入結束。 輸出格式: 兩個整數,第一個整

C語言 翁愷·第3周

1時間換算(5分) 題目內容: UTC是世界協調時,BJT是北京時間,UTC時間相當於BJT減去8。現在,你的程式要讀入一個整數,表示BJT的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分;如果小時是0,則沒有百位部分;如果小時不是0而分小於10分,