『壹』 c語言判斷給定表達式的括弧是否匹配
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char c;
int i=0,n;
int output[100];
int lefts=0,leftm=0,leftb=0;
int rights=0,rightm=0,rightb=0;
while((c=getchar())!='*')
{
if(c=='\n')
{
if(lefts == rights && leftm == rightm && leftb ==rightb)output[i]=1;
else output[i]=0;
lefts=0;
leftm=0;
leftb=0;
rights=0;
rightm=0;
rightb=0;
i++;
}
if(c == '(' )lefts++;
if(c == ')' )rights++;
if(c == '[' )leftm++;
if(c == ']' )rightm++;
if(c == '{' )leftb++;
if(c == '}' )rightb++;
}
n=i;
for(i=0;i<n;i++)
{
if(output[i]==1)printf("yes\n");
else printf("no\n");
}
system("pause");
return 0;
}
這是程序,當輸入星號*就結束。不論是否一行只有它。有點不符合題意呃。你可以改改。
上面那個人寫的為單行輸入。且沒有考慮中括弧和大括弧。
『貳』 用C語言如何實現判斷圓括弧是否配對
如果只有圓括弧(沒有[ ] 或 { }),不需要構造一個棧。因為用棧實現時,棧里裝的都是一模一樣的左括弧 '(' ,因此我們只需定義一個 整型變數 來記錄 棧中元素的個數 即可。具體代碼如下:
#include <stdio.h>
int main (void)
{
char input = 0;
int num = 0; /* 不用棧,只記錄棧中元素的個數,初始化為0 */
while (1 == scanf ("%c", &input)) /* 讀入字元串,每次讀一個字元存入 input 中 */
{
if ('(' == input)
{
++num; /* 相當於把左括弧壓棧 */
}
if (')' == input)
{
--num; /* 相當於遇到右括弧時彈棧 */
}
if (0 > num)
{
printf ("括弧不匹配\n");
return 0;
}
}
if (0 == num) /* 讀完字元串後判斷「棧」是否為空 */
{
printf ("括弧匹配\n");
}
else
{
printf ("括弧不匹配\n");
}
return 0;
}
『叄』 求一個 用棧實現括弧匹配檢驗 的C語言程序
#include<stdio.h>
struct T{
int tag;
};
struct T t[128];
int top=0;
int isEmpty(){
if(top<=0) return 1;
else return 0;
}
int isFull(){
if(top>=127) return 1;
else return 0;
}
void push(int tag){
if(isFull()) {return;}
t[top].tag=tag;
top++;
}
int out(){
if(isEmpty()) {return -1;}
int number=0;
number=t[top].tag;
t[top].tag=0;
top--;
return number;
}
int check(char *p)
{
int x[128]={0};
int temp=0;
int k=0;
while(*p!='\0'){
if(*p=='{') push(temp);
if(*p=='}') k=out();
if(k==-1) break;
temp++;
p++;
}
if(top!=0)
{
while(!isEmpty()){
printf("[%d]處的{沒有匹配,缺少}\n",out()-1);
}
}
else
{
printf("[%d]處的}沒有匹配,缺少{\n",temp);
}
return 0;
}
main()
{
char *x="main(){int x=0;while(true){int x=324;}printf('dsgdg');}}}";
printf("%d\n",check(x));
}
『肆』 編程實現檢驗括弧是否匹配
#include <stdio.h>
char stack[100];
int top=-1;
void push(char ch)
{
stack[++top]=ch;
}
char pop()
{
if(top<-1)
{
top--;
return '\0';
}
else
{
return stack[top--];
}
}
int main(void)
{
char c[20];
int i=0;
char ch;
gets(c);
while(c[i] != '\0')
{
if(c[i] == '(')
push(c[i]);
if(c[i] == ')')
{
ch=pop();
if(ch=='\0')
break;
}
i++;
}
if(top == -1)
printf("right");
else
printf("wrong");
return 0;
}
『伍』 C語言:表達式括弧匹配檢驗(壓棧,出棧)
演算法提示:
1)凡出現左括弧,則進棧;
2)凡出現右括弧,首先檢查棧是否空
若棧空,則表明該「右括弧」多餘,
否則和棧頂元素比較,
若相匹配,則「左括弧出棧」
,
否則表明不匹配。
3)表達式檢驗結束時,
若棧空,則表明表達式中匹配正確,
否則表明「左括弧」有餘。
『陸』 C語言怎樣檢測大括弧{}的匹配
有的C編輯器支持自動檢查的,
不過最好養成良好的書寫習慣
我的習慣是 在需要大括弧時 總是一次輸入一對
並且分行對齊 然後在中間插入東西, 基本上不會出錯的
比如
void main(viod)
{
}
先寫一對 大括弧 然後在括弧中間加東西,注意縮行, 在里邊需要大括弧時如法炮製
變成這樣
void main(viod)
{
uchar a=5;
uchar i=0
if(a<5)
{
.......
}
}
『柒』 如何用c語言實現括弧匹配的問題
先按順序取出所有的括弧.然後循環刪除_相鄰的_差為一或二的_點.最後如果表空則匹配.
單向鏈表:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 80
typedef struct list{
char node;
struct list* next;
}list,*plist;
void iniList(plist);
int isEmpty(plist);
int listAppend(plist,char);
int delBracketsFormList(plist);
int main(int argc,char* argv[]){
char test[LEN];
int i;
list a;
plist p;
p=&a;
iniList(p);
scanf("%80s",test);
for (i=0;i<LEN;i++){
switch(test[i]){
case '[': case']': case'{': case'}': case'(': case')':
listAppend(p,test[i]);
break;
default:continue;
}
}
delBracketsFormList(p);
if (isEmpty(p)){
printf("括弧匹配!\n");
}
else
printf("括弧不配對!\n");
return 0;
}
void iniList(plist aplist){
aplist->next=NULL;
aplist->node='\0';
}
int isEmpty(plist aplist){
return aplist->next==NULL?1:0;
}
int listAppend(plist aplist,char a){
plist bplist=aplist,anode;
while (bplist->next){
bplist=bplist->next;
}
anode=(plist)malloc(sizeof(list));
if (!anode)exit(-1);
anode->node=a;
anode->next=NULL;
bplist->next=anode;
return 0;
}
int delBracketsFormList(plist aplist){
plist temp;
int has=1;
if (isEmpty(aplist))
return 0;
while(has){
has=0;
temp=aplist;
while (temp->next){
if(temp->next->next){
if((temp->next->next->node - temp->next->node == 1)||(temp->next->next->node - temp->next->node == 2)){
temp->next = temp->next->next->next;
has=1;
}
else
temp = temp->next;
}
else
temp =temp->next;
if(!has)break;
}
}
return 0;
}
『捌』 急求c語言編寫的利用棧檢驗括弧匹配的程序完整代碼,謝謝啦~
輸入:串中只含有'(', ')'兩個符號,判斷是否括弧匹配
並不需要真正的入棧、出棧,用top移動模擬即可
#include <stdio.h>
int main()
{
char s[256], *p;
int top = 0;
scanf("%s", s);
for(p=s; *p; p++)
{
if(*p == '(')++top; //入
else --top; //出
if(top < 0)break; //無左括弧與之匹配
}
if(!*p && !top)puts("Yes");
else puts("No");
}
『玖』 數據結構(C) 請用類C語言實現括弧匹配的檢驗這個演算法
棧窮舉,嚴蔚敏的書上有現成的代碼
『拾』 括弧匹配檢驗(c語言)
函數返回值類型不能是Status,Status只是泛指類型,至於具體用什麼類型,你應該根據實際情況而定。
比如你的第一個函數Status InitStack(SqStack &S) ,
可以改為int InitStack(SqStack &S) ,其它的你自己根據情況定了。