① 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語言判斷一字元串左右括弧是否匹配的問題!求助
由於沒有分配空間,,,修改如下
#include
#include
#include
//
!!!分配內存頭文件
#define
m
20
typedef
char
ElemType;
typedef
struct
{
ElemType
stack[m];
int
top;
}stacknode;
stacknode
*sp;
Init(stacknode
*st)
{
st->top=0;
return
0;
}
void
Push(stacknode
*st,ElemType
x)
{
if(st->top==m)
printf("The
stack
is
overflow!\n");
else
{
st->top=st->top+1;
st->stack[st->top]=x;
}
}
void
Pop(stacknode
*st)
{
st->top=st->top-1;
}
main()
{
char
s[m];
int
i;
printf("Creat
a
stack!\n");
sp
=
(stacknode
*)malloc(sizeof(stacknode));
//
!!!添加的語句
Init(sp);
printf("Input
a
expression:\n");
gets(s);
for(i=0;i
top==0)
printf("左右括弧是匹配的!\n");
else
printf("左右括弧是不匹配的!\n");
}
③ C語言題,先輸入一個整數後接空格代表有幾個字元要輸入,然後輸入字元,判斷左/右括弧是否配對
d沒有初始化 將導致d隨機讀取內存地址,若是讀取的地址是常量地址,一旦修改就會引發segement fault錯誤
④ C語言 給定的表達式中左右括弧數量是否匹配
假定全部都是小括弧,int i j
表達式char* ch = "12345((8277)7778"
for(int k =0;k<len;K++)
{
if( ch[k] = 左括弧)i++
if( ch[k] = 右括弧)j++
}
if(i == j) 匹配
否則不匹配
⑤ C語言 判斷括弧()是否匹配
#include<iostream>
using namespace std;
#define maxsize 100;
#define T 10;
struct sqstack{
char *base;
char *top;
int stacksize;
};
sqstack inistack(sqstack &s){//初始化棧
s.base=new char[10];
if(!s.base)
cout<<"error";
s.top=s.base;
s.stacksize=maxsize;
return s;
}
sqstack push(sqstack &s,char &e){//進棧
if(s.top-s.base>=s.stacksize){
s.base=new char[10];
if(!s.base)
cout<<"error";
s.top=s.base+s.stacksize;
s.stacksize+=T;
}
*s.top=e;
s.top++;
return s;
}
sqstack pop(sqstack &s, char &e){//出棧
e=*s.top;
-- s.top;
return s;
}
int main(){
char *base,*top;
int total;
cout<<"請輸入字元個數:";
cin>>total;
char a[total];
for(int i=0;i<total;i++){
cin>>a[i];
}
sqstack s;
inistack(s);
for (int j=0;j<total;j++){
if(a[j]=='(')
push(s,a[j]);
else if(a[j]==')')
pop(s,a[j]);
}
if(s.base==s.top)
cout<<"true";//匹配完後,如果棧為空,則括弧匹配正確
else
cout<<"failed";
system("pause");
return 0;
}