zoukankan      html  css  js  c++  java
  • (字符串的处理4.7.22)POJ 3337 Expression Evaluator(解析C风格的字符串)

    /*
     * POJ_3337.cpp
     *
     *  Created on: 2013年10月29日
     *      Author: Administrator
     */
    
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    const int maxn = 10010;
    int data[26];//用来存储每一个字母所对应的数字
    char opr[maxn];//去掉空格后的表达式
    char opr1[maxn];//去掉空格钱的表达式
    bool vst[maxn];//用来标记某一个字符是否已经访问过
    
    void init() {
    	int i;
    	for (i = 0; i < 26; ++i) {
    		data[i] = i + 1;
    	}
    
    	memset(vst, 0, sizeof(vst));
    }
    int main() {
    	int ans;
    	int t;
    	int i, j;
    	scanf("%d", &t);
    	getchar();//调用gets()之前尽量加上这一句
    	while (t--) {
    		init();
    		ans = 0;
    		bool flag = false;
    		gets(opr1);
    		int len = strlen(opr1);
    		for (i = 0, j = 0; i < len; i++) { //去掉空格
    			if (opr1[i] != ' ') {
    				opr[j] = opr1[i];
    				j++;
    			}
    		}
    		for (i = 0; i < j; ++i) {
    			if (flag == false) { //6种情况
    				if (opr[i] >= 'a' && opr[i] <= 'z') { //如果是字母
    					if (i - 2 >= 0 && opr[i - 2] == '+' && opr[i - 1] == '+') { //++a
    						data[opr[i] - 'a']++;
    						ans = data[opr[i] - 'a'];
    						vst[opr[i] - 'a'] = true;
    					} else if (i - 2 >= 0 && opr[i - 2] == '-'
    							&& opr[i - 1] == '-') { //--a
    						data[opr[i] - 'a']--;
    						ans = data[opr[i] - 'a'];
    						vst[opr[i] - 'a'] = true;
    					} else if (opr[i + 2] == '+' && opr[i + 1] == '+') { //a++
    						ans = data[opr[i] - 'a']++;
    						vst[opr[i] - 'a'] = true;
    					} else if (opr[i + 2] == '-' && opr[i + 1] == '-') { //a--
    						ans = data[opr[i] - 'a']--;
    						vst[opr[i] - 'a'] = true;
    					} else if (opr[i - 1] == '-') { //-a
    						ans = -data[opr[i] - 'a'];
    						vst[opr[i] - 'a'] = true;
    					} else { //+a
    						ans = data[opr[i] - 'a'];
    						vst[opr[i] - 'a'] = true;
    					}
    					flag = true;
    				}
    			} else { //8种: b-++a  b+--a b-a++ b-a-- b+a++ b+a-- -a +a
    				if (opr[i] >= 'a' && opr[i] <= 'z') {
    					if (i - 4 >= 0 && opr[i - 2] == '+' && opr[i - 1] == '+'
    							&& opr[i - 3] == '-') { //b-++a
    						ans = ans - (++data[opr[i] - 'a']);
    						vst[opr[i] - 'a'] = true;
    					} else if (i - 4 >= 0 && opr[i - 2] == '-'
    							&& opr[i - 1] == '-' && opr[i - 3] == '+') { //b+--a
    						ans = ans + (--data[opr[i] - 'a']);
    						vst[opr[i] - 'a'] = true;
    					} else if (opr[i + 1] == '+' && opr[i + 2] == '+') {
    						if (opr[i - 1] == '-') { //b-a++
    							ans = ans - data[opr[i] - 'a'];
    							data[opr[i] - 'a']++;
    							vst[opr[i] - 'a'] = true;
    						}
    						if (opr[i - 1] == '+') { //b+a++
    							ans = ans + data[opr[i] - 'a'];
    							data[opr[i] - 'a']++;
    							vst[opr[i] - 'a'] = true;
    						}
    					} else if (opr[i + 1] == '-' && opr[i + 2] == '-') {
    						if (opr[i - 1] == '+') { //b+a--
    							ans = ans + data[opr[i] - 'a'];
    							data[opr[i] - 'a']--;
    							vst[opr[i] - 'a'] = true;
    						}
    						if (opr[i - 1] == '-') { //b-a--
    							ans = ans - data[opr[i] - 'a'];
    							data[opr[i] - 'a']--;
    							vst[opr[i] - 'a'] = true;
    						}
    					} else if (opr[i - 1] == '-') { //-a
    						ans = ans - data[opr[i] - 'a'];
    						vst[opr[i] - 'a'] = true;
    					} else if (opr[i - 1] == '+') { //+a
    						ans = ans + data[opr[i] - 'a'];
    						vst[opr[i] - 'a'] = true;
    					}
    				}
    			}
    		}
    
    		printf("Expression: %s
    ", opr1);//注意这里输出的是opr1,而不是opr,因为opr已经被处理过
    		printf("value = %d
    ", ans);
    
    		for (i = 0; i < 26; ++i) {
    			if (vst[i]) {
    				printf("%c = %d
    ", i + 'a', data[i]);
    			}
    		}
    	}
    
    	return 0;
    }
    


  • 相关阅读:
    Mongodb
    Java原子类
    volatile
    uniapp输入空格
    看不见的的html
    小程序隐藏scroll-view滚动条的方法
    云函数调用云函数 openid不存在
    vue路由中 Navigating to current location ("/xxx") is not allowed
    Vue: 单页面应用如何保持登录状态
    letter-spacing
  • 原文地址:https://www.cnblogs.com/james1207/p/3395476.html
Copyright © 2011-2022 走看看