題目:給你一個串,判斷是否是Pascal語言中的合法浮點數。
說明:字符串。按照題目要求處理即可。
1.去掉前綴的空格;
2.e的前面可以有小數點,後面不能有;
3.小數點和e前後必須都有數字;
4.兩端的數字可以有一個符號前綴;
5.小數點和e最多各有,至少有一種;
6.其他的檢測不檢測都可以;
說明:╮(╯▽╰)╭。
#include <cstdlib>
#include <cstdio>
#include <cstring>
int main()
{
char buf[1001];
while (gets(buf)) {
if (buf[0] == '*') break;
int move = 0, over = strlen(buf)-1, flag = 1;
while (buf[move] == ' ') move ++;
int p_count = 0, e_count = 0;
for (int i = move; i <= over; ++ i) {
if (buf[i] == '.') p_count ++;
if (buf[i] == 'e') e_count ++;
if (buf[i] == 'E') e_count ++;
}
if (e_count > 1 || p_count > 1 || e_count+p_count == 0)
flag = 0;
int last = over, start = move;
if (flag && e_count == 1) {
for (int i = move; i <= over; ++ i)
if (buf[i] == 'e' || buf[i] == 'E') {
if (i == move || i == over) flag = 0;
over = i-1;
start = i+1;
break;
}
if (buf[start] == '+' || buf[start] == '-')
start ++;
for (int i = start; i <= last; ++ i)
if (buf[i] < '0' || buf[i] > '9') {
flag = 0;
break;
}
}
if (flag) {
int from = 0;
if (buf[move] == '+' || buf[move] == '-')
from = 1;
for (int i = move+from; i <= over; ++ i)
if (p_count == 1 && buf[i] == '.' && i < over && i > move+from)
continue;
else if (buf[i] < '0' || buf[i] > '9') {
flag = 0;
break;
}
}
for (int i = move; i <= last; ++ i)
printf("%c",buf[i]);
if (flag)
printf(" is legal.\n");
else printf(" is illegal.\n");
}
return 0;
}