P5 切分表達式——寫個tokenizer吧 (20分)

[先說點出題背景]

這個題是爲低年級同學、學C語言的同學準備的,因爲,對這部分同學,這個題目編寫起來略有一點複雜。如果是高年級、學過了正則表達式(Regular Expression)的同學或者學過了Java等OO語言的同學做這個題,應當發現這題比較簡單吧。哦,對了,什麼是tokenizer?請自行查詢解決。反正在此處不應翻譯成“令牌解析器”。

[正題]

四則運算表達式由運算數(必定包含數字,可能包含正或負符號小數點)、運算符(包括+-*/)以及小括號(())組成,每個運算數、運算符和括號都是一個token(標記)。現在,對於給定的一個四則運算表達式,請把她的每個token切分出來。題目保證給定的表達式是正確的,不需要做有效性檢查。

輸入格式:

在一行中給出長度不超過40個字符的表達式,其中沒有空格,僅由上文中token的字符組成

輸出格式:

依次輸出表達式中的tokens,每個token佔一行。

輸入樣例:

32*((2-2)+5)/(-15)
 

輸出樣例:

32
*
(
(
2
-
2
)
+
5
)
/
(
-15
)

#include<iostream>
#include<cstring>
using namespace std;
int main(){
	char s[50];
	cin >> s;
	int len = strlen(s),flag = 0;
	for(int i = 0; i < len; i++){
		if((s[i] >= '0' && s[i] <= '9') || s[i] == '.'){
			if((s[i + 1] >= '0' && s[i + 1] <= '9') || s[i + 1] == '.')cout << s[i];
			else cout << s[i] << "\n";
		}
		else if(s[i] == '-' || s[i] == '+'){
			if(s[i - 1] >= '0' && s[i - 1] <= '9')cout << s[i] << "\n" ;
			else cout << s[i];
		}
		else cout << s[i] << "\n";
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章