华为编程大赛之括号匹配
輸入一個字符串表達式,判斷括號匹配
例如:{}{}{}【】【】(){【】}? 匹配
{【{】}}? 不匹配
?
使用堆棧實現,源碼如下:
?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
//typedef char* PCHAR;
#define STACK_SIZE 100
int top = -1;
void inistack(PCHAR& s)
{
//?char* s;
?s=(char*)malloc(STACK_SIZE);
?memset(s,'/0',STACK_SIZE);
//?return s;
}
void destorystack(PCHAR& s)
{
?free(s);?
}
void push(char* s,char e)
{
?//top++;
?if (top == STACK_SIZE-1)
?{
??s = (char*)realloc(s,STACK_SIZE*2);
?}
?top++;
?s[top] = e;
}
char pop(char* s)
{
?char c=s[top];
?top--;
?return c;
}
BOOL isEmpty()
{
?return top == -1;
}
int scaleMah(const char* a)
{
?int sizes = strlen(a);
?int i=0;
?char c='d';
?char* s=&c;
?inistack(s);
?char zhan[100] = {0};
?int j=0;
?for (i=0;i<sizes;i++)
?{
??switch (a[i])
??{
??case '(':
??case '[':
??case '{':
???{
????push(s,a[i]);
????break;
???}
??case ')':
???{
????if(isEmpty()) return 0;
????if(pop(s) != '(') return 0;????
????
????break;
???}
??case ']':
???{
????if(isEmpty()) return 0;
????if(pop(s) != '[') return 0;?????
????break;
???}
??case '}':
???{
????if(isEmpty()) return 0;
????if(pop(s) != '{') return 0;
????printf("/n");
????break;
???}
??}
?}
?destorystack(s);
?if(!isEmpty()) return 0;
?else return 1;
??
}
int main()
{
?printf("please input /n/n");
??char a[100] = {0};
??scanf("%s",a);
??int r = scaleMah(a);
??if (r == 0)
??{
???printf("not mach/n");
??}
??else printf("mached!/n");
?return 0;
}
總結
以上是生活随笔為你收集整理的华为编程大赛之括号匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++OpencvPCB板子引脚缺陷检测
- 下一篇: 如何正确使用LCR测试仪测量电子元件