在文句中,只可能包括「中文」及「半型數字」,並且不包含任何空白及標點符號。待檢查的「日期字串」格式為「民國
yyy年 mm月 dd日」,其中「民國」、「年」、「月」及「日」的順序不可改變。屬於年的「
yyy」部分,合法值是「 1~999」,可存在「前置 0」,但其長度僅能是
1、2或 3位數。例如民國 9年,可表現為「民國 9年」、「民國
09年」或「民國 009年」。關於月份部分,合法值是「1~12」,同樣接受「前置
0」,其長度僅能是 1或 2位數。日期部分的範圍是「 1~31」,亦接受「前置 0」,其長度僅能是
1或 2位數。選手應另注意,符合條件的日期值不應超過該年當月份的最大天數,例如某年某月份有 30天,則符合條件的日期值為 1~30。
【註 1】西元年 = 民國年 +
1911
【註 2】在本題限制的年份中,若其西元年「可被 400整除」或是「可被 4整除而且不被
100整除」,則當年是閏年,其 2月有 29天,否則為 28天。
輸入說明:輸入檔中的第 1~4行,表示待檢查的
4句文句,每行文句均獨立檢查,每句文句不超過 100個字。
輸出說明:依序 4行輸出,分別對應輸入檔第 1~4行文句之檢查結果。若文句中存在符合條件的「日期字串」請輸出「符合」,若不存在時請輸出「不符合」。輸入檔案 1:【檔名:in1.txt】
他的生日是民國 89 年2 月29 日
她的生日是民國 90 月2 年29 日
民國 90 年3 月25 日是他的到職日
民國 90 年25 日3 月是她的到職日
輸入檔案 2:【檔名:in2.txt】
他的生日是民國 89 年12 月32 日
她的生日是民國 89 年12 月31 日
民國 090 年03 月02 日是他的到職日
民國 1000 年12 月31 日是她的到職日
輸出檔案:【檔名:out.txt】
符合
不符合
符合
不符合
不符合
符合
符合
不符合
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in1.txt" For Input As #1
Open App.Path & "\in2.txt" For Input As #2
Open App.Path & "\out.txt" For Output As #3
For i = 1 To 4
Line Input #1, n
Call A1(n)
Next
Print #3, " "
For i = 1 To 4
Line Input #2, n
Call A1(n)
Next
Close
Close
Close
End
End Sub
Sub A1(a)
Dim y$, mo$, d$
ch = 0
For i = 1 To Len(a)
If ch = 0 Then m = Mid(a, i, 2) Else m = Mid(a, i, 1)
If m = "民國" Then ch = 1: i = i + 1
If m = "日" Then ch = 0: b = b & m: Exit For
If ch = 1 Then b = b & m
Next
' Check 1
If InStr(b, "年") = 0 Or InStr(b, "月") = 0 Or InStr(b, "日") = 0 Then GoTo Fa:
If InStr(b, "年") > InStr(b, "月") Or InStr(b, "年") > InStr(b, "日") Or InStr(b, "月") > InStr(b, "日") Then GoTo Fa:
'Check 1 - Y
ch = 0
For i = 1 To Len(b)
m = Mid(b, i, 1)
If m = "國" Then ch = 1: m = ""
If m = "年" Then ch = 0
If ch = 1 Then y = y & m
Next
If Len(Trim(y)) > 3 Or Trim(y) < 0 Then GoTo Fa:
'Check 2 - Mo
ch = 0
For i = 1 To Len(b)
m = Mid(b, i, 1)
If m = "年" Then ch = 1: m = ""
If m = "月" Then ch = 0
If ch = 1 Then mo = mo & m
Next
If Val(mo) > 12 Or Val(mo) < 1 Then GoTo Fa:
'Check 2 - D
ch = 0
For i = 1 To Len(b)
m = Mid(b, i, 1)
If m = "月" Then ch = 1: m = ""
If m = "日" Then ch = 0
If ch = 1 Then d = d & m
Next
si = Val(y) + 1911
If si Mod 100 = 0 Or (si Mod 4 = 0 And si Mod 100 <> 0) Then s = Split("X 31 29 31 30 31 30 31 31 30 31 30 31") Else s = Split("X 31 28 31 30 31 30 31 31 30 31 30 31")
If Trim(d) > s(mo) Or Val(d) < 0 Then GoTo Fa:
Print #3, "符合"
Exit Sub
Fa:
Print #3, "不符合"
End Sub