㈠ 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>
#include<ctype.h>
#include<stdlib.h>
char token[61]; /*存放表達式字元串的數組*/
int n=0;
void error(void) /*報告錯誤函數*/
{
printf("ERROR!\n");
exit(1);
}
void match(char expected) /*檢查字元匹配的函數*/
{
if(token[n]==expected)
token[++n]=getchar();
else error();
}
double term(void); /*計算乘除的函數*/
double factor(void); /*處理括弧和數字的函數*/
double exp(void) /*計算加減的函數*/
{
double temp=term();
while((token[n]=='+')||(token[n]=='-'))
switch(token[n])
{
case'+':match('+');
temp+=term();
break;
case'-':match('-');
temp-=term();
break;
}
return temp;
}
double term(void)
{
double div;
double temp=factor();
while((token[n]=='*')||(token[n]=='/'))
switch(token[n])
{
case'*':match('*');
temp*=factor();
break;
case'/':match('/');
div=factor();
if(div==0) /*處理除數為零的情況*/
{
printf("The divisor is zero!\n");
exit(1);
}
temp/=div;
break;
}
return temp;
}
double factor(void)
{
double temp;
char number[61];
int i=0;
if(token[n]=='(')
{
match('(');
temp=exp();
match(')');
}
else if(isdigit(token[n])||token[n]=='.')
{
while(isdigit(token[n])||token[n]=='.') /*將字元串轉換為浮點數*/
{
number[i++]=token[n++];
token[n]=getchar();
}
number[i]='\0';
temp=atof(number);
}
else error();
return temp;
}
main()
{
double result;
FILE *data=fopen("61590_4.dat","at");
if(data==NULL)
data=fopen("61590_4.dat","wt");
if(data==NULL)
return 0;
token[n]=getchar();
result=exp();
if(token[n]=='\n')
{
token[n]='\0';
printf("%s=%g\n",token,result);
fprintf(data,"%s=%g\n",token,result);
}
else error();
fclose(data);
return 0;
getch();
}
㈢ C語言的中括弧是什麼東東,怎麼看怎麼像小括弧
您好,我是軟體之家的♂北極熊熊,很高興為您解答。
==================================================================================
()這個是小括弧
有的教材把它簡稱為括弧,弧是圓弧的意思,就很明顯括弧就是()
而中括弧是[],別混淆了哦
==================================================================================
如您滿意,謝謝五星採納~~~~~↖(*^ω^*)↗
㈣ c語言的順序表 棧 判斷表達式括弧是否匹配
int match_kuohao(char c[i])
{
int i=0;
sequence_stack s;
init(&s); //初始化棧, &這個符號是用來修改s這個實參的值的,不然不能修改。
while(c[i]!='#')
{
switch(c[i])
{
case'{':
case'[':
case'(':push (&s,c[i]);break;
case'}':if(!empty(s)&&read(s)=='{' )
{pop(&s);break;}
else return 0; //意思就是如果遇到了右大括弧的話,那麼棧S不是空且棧頂元素是左大括弧,
//那麼就讓這個棧頂元素{出棧。
//如果棧是空的,或者說棧頂的不是{,那麼就return 0,意思也就是表達式不合法。下面同理。
case']':if(!empty(s)&&read(s)=='[' )
{pop(&s);break;}
else return 0;
case')':if(!empty(s)&&read(s)=='(' )
{pop(&s);break;}
else return 0;
}
i++;
}
return (empty(s));
}
㈤ c語言如何判斷一個符號是比較符號還是括弧
熟悉語法,用眼睛看,簡單。
用程序分析,很難,如同製作一個編譯器,作詞法,句法,語法分析。
你可以先羅列一些能想到的狀況,然後決定如何分析判斷。
例如:
#include 行里的 < ..> 是 括弧。
/* ..<. */ 註解行里的 是 註解
// ...< 註解行里的 是 註解
" ... < .." 字元串里的 是 字元
'<' 字常量里的 是 字元
a < b 類似這種情況是運算符, 噢 不排除 &a,&b,*a,&b,不排除 (a) (b) ....
a<=b 類似這種情況是運算符
a<<b 類似這種情況是運算符
a<<=b 類似這種情況是運算符
還好不是 >, 不用考慮 ->
還好不是 c++, 否則還要考慮:
static_cast<type>(a)
dynamic_cast<type>(a)
const_cast<type>(a)
reinterpret_cast<type>(a)
template <class T>
k=GetMax<int>(i,j);
i = GetMin<int,long> (j,l);
mypair<double> myfloats (3.0, 2.18);
template <class T>
T mypair<T>::getmax ()
cout << k << endl;
等等等等情況
還有寫錯的情況,即不符合詞法,句法,語法的情況。
㈥ 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;
}
㈦ 判斷圓括弧是否配對用C語言如何實現
1、設計原理:
主要是利用了棧的結構,在表達式的輸入過程中實現對括弧是否匹配的判斷。根據其括弧的原則:小括弧之中不能含有大括弧或中括弧,中括弧中不能含有大括弧。再由緊密性,左邊括弧和右邊括弧是緊密相連的。否則判斷為錯。 其操作為:每輸入一個字元打一下回車,若輸入括弧順序錯誤則跳出,並顯示錯誤!
2、常式:
#include<stdio.h>
#defineMAX100
#defineTRUE1
#defineFALSE0
#defineEa
typedefstructtransition/*建立一個棧*/
{
charsq[MAX];
inttop;
}sqstack;
sqstackbt;
intemptysqstack(sqstackbt)/*判棧空*/
{
if(bt.top==-1)
returnTRUE;
else
returnFALSE;
}
voidpushsqstack(sqstackbt,charsh)/*入棧*/
{
if(bt.top==MAX-1)
{
printf("overflow");
exit(0);
}
bt.top++;
bt.sq[bt.top]=sh;
}
voidpopsqstack(sqstackbt)/*出棧*/
{
intsh;
if(bt.top==-1)
{
printf("empty");
exit(0);
}
sh=bt.sq[bt.top];
bt.top--;
returnsh;
}
Search(sqstackbt)/*查找括弧是否匹配*/
{
charc=0;
printf("Ifyouwanttobreak,pleaseinput'a' ");
while(c!=E&&bt.top<=MAX&&c!='('&&c!='['&&c!='{')
{
c=getchar();
pushsqstack(bt,c);
}
SearchA(bt,c);
SearchB(bt,c);
SearchC(bt,c);
}
SearchA(sqstackbt,charc)/*查找小括弧是否匹配*/
{
if(c=='(')
{
while(c!=')'&&c!='['&&c!=']'&&c!='{'&&c!='}')
{
c=getchar();
pushsqstack(bt,c);
}
if(c=='(')
printf("right ");
elseif(c=='['||c==']'||c=='{'||c=='}')
printf("wrong ");
}
}
SearchB(sqstackbt,charc)/*查找中括弧是否匹配*/
{
if(c=='[')
while(c!=']'&&c!='('&&c!=')'&&c!='{'&&c!='}')
{
c=getchar();
pushsqstack(bt,c);
}
if(c==')'||c=='{'||c=='}')
printf("wrong ");
elseif(c=='(')
SearchA(bt,c);
elseif(c==']')
printf("right ");
else
printf("wrong ");
}
SearchC(sqstackbt,charc)/*查找大括弧是否匹配*/
{
if(c=='{')
while(c!='}'&&c!='['&&c!=']'&&c!='('&&c!=')')
{
c=getchar();
pushsqstack(bt,c);
}
if(c==']'||c==')')
printf("wrong ");
elseif(c=='[')
SearchB(bt,c);
elseif(c=='(')
SearchA(bt,c);
elseif(c=='}')
printf("right ");
else
printf("wrong ");
}
main()
{
inti;
bt.top=-1;
i=emptysqstack(bt);
if(i)
{
Search(bt);
}
else
exit(0);
}
㈧ c語言判斷一字元串左右括弧是否匹配的問題!求助
由於沒有分配空間,,,修改如下
#include<stdio.h>
#include<string.h>
#include <stdlib.h> // !!!分配內存頭文件
#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<strlen(s);i++)
{
if(s[i]=='(')
Push(sp,s[i]);
if(s[i]==')')
Pop(sp);
}
if(sp->top==0)
printf("左右括弧是匹配的!\n");
else
printf("左右括弧是不匹配的!\n");
}
㈨ c語言中while循環後面的語句沒有用括弧括起來,怎麼判斷哪些語句是在循環裡面,為什麼
while(循環條件)
表達式a;
表達式b;
表達式c;
沒有大括弧的話,循環體就只有表達式a,就是說while()後第一個分號前面的語句就是循環體。所以當只有一個表達式時,也可以省略掉大括弧。
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
㈩ C語言用棧寫一個判斷輸入的表達式的括弧是否正確的演算法
入棧的是 「(」 或者 「【」 ,
然後收到 ")" 或者「】」 的時候,
看站頭是不是對應的 「(」 或者「】」,是的話彈出,不是就錯誤,
循環,直到站空,否則錯誤。
比如堆棧 是 「(((【【【((」
遇到")", 彈出站頭,中間可以繼續壓入「(」或「【」