資料結構之正規表示式和棧

2021-10-23 12:52:14 字數 2719 閱讀 1580

遇到問題不斷補充中

該**並未使用字首表示式或者字尾表示式,直接處理字串,按照字串順序進行處理表示式

注意 code from nekenet

該**量比字首表示式求正則 和字尾表示式求正則 要少很多

```c

//regular expression evaluation

#if 1

#includeint pos;

int compute(char* data)

/** convert string to number !!!it's a good skill to transform string to num

int isdigit(char a ); introduce how to use isdigit

#include#includeint main()

if (isdigit(c))

return 0;}

**/ while (pos < len && isdigit(data[pos]))

//condition 3

switch (flag)

num = 0;

flag = data[pos];

//condition 4

if (data[pos] == '}' || data[pos] == ']' || data[pos] == ')')

pos++;

} int res = 0;

for (int i = 0; i <= top; i++)

return res;

}int main()

return 0;

}#endif

``字尾表示式主要是使用棧的資料結構來實現,學習使用字尾表示式來求運算字串時(例如:2+4*(3+5) ),需要對棧了解比較清楚,可以使用陣列棧的形式,也可以使用鍊錶棧的形式。建議最好畫框架圖來分析字尾表示式運算時對各種判斷的優先順序,加強對**的理解。

#include

#include

#include

#include

#include

"type.h"

#define maxn 100

extern in n;

extern ch m;

/*description: use to judge the priority with c1,c2

if c1 is high level ,return 1

else return 0;

*/int

ishigh

(char c1,

char c2)

else

if(c2 ==

'*'|| c2 ==

'/')}if

(c1 ==

'*'|| c1 ==

'/')

if(c1 ==

'(')}/*

operate + - * /

*/int

calcpro

(int a,

int b,

int ch)}/*

convert infix expression to postfix expression

*/int

compute1

(char

* str)

'|| str[pos]

==']'

) str[pos]

=')';}

pos =0;

//when input a new str, we need initialize pos

//while (pos < len)

/*description

when str[pos] is ')' ,before pop chstack a '(' ,we need pop intstack n1 ,n2 ,and pop chstack ch1,compute the n1 ch n2,and push the temp into intstack.

*/if

(str[pos]

==')'

) ch1 =

stackarraypopch()

;continue;}

if(str[pos]

=='+'

|| str[pos]

=='-'

|| str[pos]

=='*'

|| str[pos]

=='/'

)else

else

continue;}

}int n1=0;

while

(isdigit

(str[pos]))

if(n1 !=0)

stackarraypushin

(n1)

; n1 =0;

pos--;}

while

(stackarrayemptych()

==0)else

return

stackarraypopin()

;}int res;

res =

stackarraypopin()

;return res;

//}}

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

js 正規表示式之環視結構

1 環視不 占用 字元,只匹配字元所在的特定位置。2 正規表示式是從左向右進行匹配的。子表示式匹配當前位置的右側字元 圖中 紅色表示當前位置,綠色表示正則匹配,黃色表示斷言匹配 1 起始位為0 2 從左向右檢視文字,如果當前位置字元與表示式2匹配成功,就檢視右側文字是否滿足斷言條件,當條件1與條件2...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...