已解决
如何做一个无符号数识别程序
来自网友在路上 188888提问 提问时间:2023-10-26 02:22:04阅读次数: 88
最佳答案 问答题库888位专家为你答疑解惑
1.状态分析
我们可以把无符号数分为:整数,带小数,带指数部分三种形式。以此构建一个DFA。首先需识别输入是整数还是小数点,若是整数部分输入然后还要再循环识别一次是否有小数点,最后识别是否有指数部分,指数部分可以带有符号。
2.画出状态图
下图种d代表整数,不在状态图中的情况则表示这不是无符号数
3.构造状态矩阵
状态图种不存在的情况则标为-1
.E/e+/-dother03-1-1-1-1124-11-12-14-12-13-1-1-12-14-1-156-15-1-1-16-16-1-1-16-14.程序实现
#include <iostream>
#include <string>
using namespace std;// 状态转换表0: . 1: e 2: + or - 3: 0-9 4: other
int state[7][5] = {{3, -1, -1, 1, -1},{2, 4, -1, 1, -1},{-1, 4, -1, 2, -1},{-1, -1, -1, 2, -1},{-1, -1, 5, 6, -1},{-1, -1, -1, 6, -1},{-1, -1, -1, 6, -1}
};
int allend[3] = {1, 2, 6}; //可以结束的状态int judge(char change) {if (change == '.') return 0;else if (change == 'E' || change == 'e') return 1;else if (change == '+' || change == '-') return 2;else if (change >= '0' && change <= '9') return 3;else return 4;
} //跳转函数int isend(int now) {for (int i = 0; i < 3; i++) {if (now == allend[i]) return 1;}return 0;
} // 判断是否为结束状态int main() {string s;while (cin >> s) {int now = 0;for (int i = 0; i < s.length(); i++) {cout << now << "->";int index = judge(s[i]);now = state[now][index];cout << now << endl;if (now == -1) break; // 发现不是无符号数}if (isend(now) == 1) cout << "yes\n";else cout << "no\n";}return 0;
}
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"如何做一个无符号数识别程序":http://eshow365.cn/6-24676-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 【stm32】stm32MX定时器
- 下一篇: 中国区域2013-2021年森林地上生物量产品