切分表達式——寫個tokenizer吧 (20 分)
阿新 • • 發佈:2019-01-17
符號 以及 ken 發現 正則表達式 stream amp 組成 mes
[先說點出題背景]
這個題是為低年級同學、學C語言的同學準備的,因為,對這部分同學,這個題目編寫起來略有一點復雜。如果是高年級、學過了正則表達式(Regular Expression)的同學或者學過了Java等OO語言的同學做這個題,應當發現這題比較簡單吧。哦,對了,什麽是tokenizer?請自行查詢解決。反正在此處不應翻譯成“令牌解析器”。
[正題]
四則運算表達式由運算數(必定包含數字
,可能包含正或負符號
、小數點
)、運算符(包括+
、-
、*
、/
)以及小括號((
和)
)組成,每個運算數、運算符和括號都是一個token(標記)。現在,對於給定的一個四則運算表達式,請把她的每個token切分出來。題目保證給定的表達式是正確的,不需要做有效性檢查。
輸入格式:
在一行中給出長度不超過40個字符的表達式,其中沒有空格,僅由上文中token的字符組成
輸出格式:
依次輸出表達式中的tokens,每個token占一行。
輸入樣例:
32*((2-2)+5)/(-15)
輸出樣例:
32
*
(
(
2
-
2
)
+
5
)
/
(
-15
)
這道題我用java是沒想到開頭的+或者-號不用加括號,用C++寫的時候想到的
#include<iostream> using namespace std; int main() { string str; cin>>str; for(int i=0;i<str.length();i++){ printf("%c",str[i]); if(str[i]>=‘0‘&&str[i]<=‘9‘){ if(str[i+1]<‘0‘||str[i+1]>‘9‘){ if(str[i+1]!=‘.‘){ printf("\n"); } } }else if(str[i]==‘*‘||str[i]==‘/‘){ printf("\n"); }else if(str[i]==‘)‘||str[i]==‘(‘){ printf("\n"); }else if(str[i]==‘+‘||str[i]==‘-‘){ if(str[i-1]!=‘(‘&&i!=0){ printf("\n"); } } } return 0; }
切分表達式——寫個tokenizer吧 (20 分)