相當於一道模擬題吧。糾結死我了、、各種wa各種不爽。。好多情況要考慮。。自己的思維全面性,以及編碼能力還是不夠啊。。。最重要的一點就是要靜下心來。。。不能浮躁。。。
1:整個浮點數前後的空格不考慮,開始我考慮在內了所以wa了很多次。。
2:分三中情況
a: 只有小數點,無e(e)...
b:只有e(e),無小數點。。
c:既有小數點,又有e(e)..
view code
#include#include
#include
using
namespace std;
#define maxn 300
char str[maxn];
int main()
if (str[i] == '
e' || str[i] == 'e')
}if ((dn > 1 || en > 1) || (dn == 0 && en == 0))//
如果小數點以及e的個數存在大於1的或者都小於0
//只存在小數點,無e的情況
else
if (dn == 1 && en == 0)
if (!(str[td - 1] >= '
0' && str[td - 1] <= '
9') || td - 1
< s)//
對緊靠小數點左邊的以為檢查
bool flag = false;
for (i = s + 1; i < td; ++i)//
對小數點左邊的所有情況進行檢查
}if (flag)
if (td + 1 >= len)//
對緊靠小數點右邊的那一點檢查
flag = false;
for (i = td + 1; i < len; ++i)//
對小數點右邊的所有數檢查
}if (flag)
else}//
只有e而沒有小數點的情況
else
if (dn == 0 && en == 1)
if (!(str[te - 1] >= '
0' && str[te - 1] <= '
9') || te - 1
< s)//
對緊靠e左邊的一位進行檢查
bool flag = false;
for (i = s + 1; i < te; ++i)//
對e左邊的所有數檢查
}if (flag)
flag = false;
for (i = te + 1; i < len; ++i)//
對e後邊的所有情況進行檢查
}if (flag)
else}//
。與e都有
else
if(dn == 1 && en == 1)
if (!(str[td - 1] >= '
0' && str[td - 1] <= '
9') || td - 1
< s)//
對緊靠.左邊的一位進行檢查
bool flag = false;
for (i = s + 1; i < td; ++i)//
對.左邊的所有情況進行檢查
}if (flag)
if (td + 1 >= te)
flag = false;
for (i = td + 1; i < te; ++i)//
對.與e之間進行檢查
}if (flag)
flag = false;
for (i = te + 1; i < len; ++i)//
對e後面的所有情況進行檢查
}if (flag)
else}}
}
編譯原理實驗 識別浮點常量問題
編譯器在對程式進行編譯之前,首先要進行語法分析。通常,程式被分解成若干個小單元,然後和語言的語法模式進行匹配。在分析表示式的時候,變數的型別在變數宣告的時候就決定了 而常量的型別需要從常量的形式來判斷。假設你是自動編譯器 acm 開發小組的一員,負責pascal語言編譯器的開發。你的任務是分析程式分...
識別浮點常量問題
time limit 1000ms memory limit 65536kb submit statistic problem description 編譯器在對程式進行編譯之前,首先要進行語法分析。通常,程式被分解成若干個小單元,然後和語言的語法模式進行匹配。在分析表示式的時候,變數的型別在變數宣...
識別浮點常量問題
time limit 1000ms memory limit 65536kb submit statistic problem description 編譯器在對程式進行編譯之前,首先要進行語法分析。通常,程式被分解成若干個小單元,然後和語言的語法模式進行匹配。在分析表示式的時候,變數的型別在變數宣...