1. /*
  2. * POJ_3337.cpp
  3. *
  4. * Created on: 2013年10月29日
  5. * Author: Administrator
  6. */
  7.  
  8. #include <iostream>
  9. #include <cstdio>
  10. #include <cstring>
  11.  
  12. using namespace std;
  13.  
  14. const int maxn = 10010;
  15. int data[26];//用来存储每一个字母所对应的数字
  16. char opr[maxn];//去掉空格后的表达式
  17. char opr1[maxn];//去掉空格钱的表达式
  18. bool vst[maxn];//用来标记某一个字符是否已经访问过
  19.  
  20. void init() {
  21. int i;
  22. for (i = 0; i < 26; ++i) {
  23. data[i] = i + 1;
  24. }
  25.  
  26. memset(vst, 0, sizeof(vst));
  27. }
  28. int main() {
  29. int ans;
  30. int t;
  31. int i, j;
  32. scanf("%d", &t);
  33. getchar();//调用gets()之前尽量加上这一句
  34. while (t--) {
  35. init();
  36. ans = 0;
  37. bool flag = false;
  38. gets(opr1);
  39. int len = strlen(opr1);
  40. for (i = 0, j = 0; i < len; i++) { //去掉空格
  41. if (opr1[i] != ' ') {
  42. opr[j] = opr1[i];
  43. j++;
  44. }
  45. }
  46. for (i = 0; i < j; ++i) {
  47. if (flag == false) { //6种情况
  48. if (opr[i] >= 'a' && opr[i] <= 'z') { //如果是字母
  49. if (i - 2 >= 0 && opr[i - 2] == '+' && opr[i - 1] == '+') { //++a
  50. data[opr[i] - 'a']++;
  51. ans = data[opr[i] - 'a'];
  52. vst[opr[i] - 'a'] = true;
  53. } else if (i - 2 >= 0 && opr[i - 2] == '-'
  54. && opr[i - 1] == '-') { //--a
  55. data[opr[i] - 'a']--;
  56. ans = data[opr[i] - 'a'];
  57. vst[opr[i] - 'a'] = true;
  58. } else if (opr[i + 2] == '+' && opr[i + 1] == '+') { //a++
  59. ans = data[opr[i] - 'a']++;
  60. vst[opr[i] - 'a'] = true;
  61. } else if (opr[i + 2] == '-' && opr[i + 1] == '-') { //a--
  62. ans = data[opr[i] - 'a']--;
  63. vst[opr[i] - 'a'] = true;
  64. } else if (opr[i - 1] == '-') { //-a
  65. ans = -data[opr[i] - 'a'];
  66. vst[opr[i] - 'a'] = true;
  67. } else { //+a
  68. ans = data[opr[i] - 'a'];
  69. vst[opr[i] - 'a'] = true;
  70. }
  71. flag = true;
  72. }
  73. } else { //8种: b-++a b+--a b-a++ b-a-- b+a++ b+a-- -a +a
  74. if (opr[i] >= 'a' && opr[i] <= 'z') {
  75. if (i - 4 >= 0 && opr[i - 2] == '+' && opr[i - 1] == '+'
  76. && opr[i - 3] == '-') { //b-++a
  77. ans = ans - (++data[opr[i] - 'a']);
  78. vst[opr[i] - 'a'] = true;
  79. } else if (i - 4 >= 0 && opr[i - 2] == '-'
  80. && opr[i - 1] == '-' && opr[i - 3] == '+') { //b+--a
  81. ans = ans + (--data[opr[i] - 'a']);
  82. vst[opr[i] - 'a'] = true;
  83. } else if (opr[i + 1] == '+' && opr[i + 2] == '+') {
  84. if (opr[i - 1] == '-') { //b-a++
  85. ans = ans - data[opr[i] - 'a'];
  86. data[opr[i] - 'a']++;
  87. vst[opr[i] - 'a'] = true;
  88. }
  89. if (opr[i - 1] == '+') { //b+a++
  90. ans = ans + data[opr[i] - 'a'];
  91. data[opr[i] - 'a']++;
  92. vst[opr[i] - 'a'] = true;
  93. }
  94. } else if (opr[i + 1] == '-' && opr[i + 2] == '-') {
  95. if (opr[i - 1] == '+') { //b+a--
  96. ans = ans + data[opr[i] - 'a'];
  97. data[opr[i] - 'a']--;
  98. vst[opr[i] - 'a'] = true;
  99. }
  100. if (opr[i - 1] == '-') { //b-a--
  101. ans = ans - data[opr[i] - 'a'];
  102. data[opr[i] - 'a']--;
  103. vst[opr[i] - 'a'] = true;
  104. }
  105. } else if (opr[i - 1] == '-') { //-a
  106. ans = ans - data[opr[i] - 'a'];
  107. vst[opr[i] - 'a'] = true;
  108. } else if (opr[i - 1] == '+') { //+a
  109. ans = ans + data[opr[i] - 'a'];
  110. vst[opr[i] - 'a'] = true;
  111. }
  112. }
  113. }
  114. }
  115.  
  116. printf("Expression: %s\n", opr1);//注意这里输出的是opr1,而不是opr,因为opr已经被处理过
  117. printf("value = %d\n", ans);
  118.  
  119. for (i = 0; i < 26; ++i) {
  120. if (vst[i]) {
  121. printf("%c = %d\n", i + 'a', data[i]);
  122. }
  123. }
  124. }
  125.  
  126. return 0;
  127. }

(字符串的处理4.7.22)POJ 3337 Expression Evaluator(解析C风格的字符串)的更多相关文章

  1. 经典算法面试题目-翻转一个C风格的字符串(1.2)

    题目: Write code to reverse a C-Style String. (C-String means that "abcd" is represented as ...

  2. POJ 3080 Blue Jeans (求最长公共字符串)

    POJ 3080 Blue Jeans (求最长公共字符串) Description The Genographic Project is a research partnership between ...

  3. Qt平台下使用QJson解析和构建JSON字符串

    前言 上一篇介绍了C语言写的JSON解析库cJSON的使用:使用cJSON库解析和构建JSON字符串 本篇文章介绍,Qt开发环境下QJson库的使用示例,JSON解析配合API接口,就可以实现一些有趣 ...

  4. java解析复杂的json字符串

    Java解析Json字符串--复杂对象(方法一)   { "name": "三班", "students": [ { "age&q ...

  5. .NET面试题解析(03)-string与字符串操作

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 字符串可以说是C#开发中最常用的类型了,也是对系统性能影响很关键的类型,熟练掌握字符串的操作非常重要. 常 ...

  6. Dom4j解析xml格式的字符串【java】

    一般我们会使用dom4j.SAX.w3c来解析xml文件,网上也大多提供此类解决方案. 但在实际项目中,也有会解析xml格式的字符串报文的. 比如,有如下字符串: String = "< ...

  7. C 一个字符串有三段,第一段原样输出,第二段为要输出字符串的长度,第三段为依据第二段长度补齐第一段

    C 一个字符串有三段,第一段原样输出.第二段为要输出字符串的长度,第三段为依据第二段长度补齐第一段 比如:输入abc 11 12.输出abc12121212 #include<stdio.h&g ...

  8. C++中的字符串的输入输出函数、空字符与空格的区别、字符变量赋值和字符串初始化

      一.字符串输入输出函数 1.  cin.get()   逐个字符输入输出 2.  cin 可以将整个字符串一次性输入,但是,cin将空格.Tab和回车键,因此不能用于数组的一次性输入. 注意:ci ...

  9. String 类中的几个练习--获取指定字符串中,大写字母、小写字母、数字的个数||获取一个字符串中,另一个字符串出现的次数

    package cn.homework.demo1; public class GetCount { /* * 获取一个字符串中,另一个字符串出现的次数 * 思想: * 1. indexOf到字符串中 ...

随机推荐

  1. BZOJ 4726 POI 2017 Sabota? 树形DP

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 128  Solved ...

  2. ZOJ 2112 Dynamic Rankings (动态第k大,树状数组套主席树)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  3. RAD Studio 2010~XE8 官方 ISO 下载地址 (2015-03-28更新)

    http://bbs.csdn.net/topics/390816856 RAD Studio XE8 目前最新版 v22.0.19027.8951 官方 ISO 文件下载(6.72GB):http: ...

  4. Android 官方文档:(一)动画和图像 —— 1.5 画布和画图

    The Android framework APIs provides a set 2D drawing APIs that allow you to render your owncustom gr ...

  5. 微软正式发布VS2015和.Net为开发者提供数百个新功能

    今天,我很高兴地向大家宣布:Visual Studio 2015 和 .Net 4.6 的正式版本现已提供下载! 自去年十一月我们提出了微软开发技术的愿景:让所有开发者,无论他在什么平台,开发哪种应用 ...

  6. fundamentals5

    PROTOBUF的DELPHI开源框架fundamentals5 GITHUB: https://github.com/fundamentalslib/fundamentals5 # Fundamen ...

  7. UI----------------Toggle

    Is On:是否已经勾选上了 Toggle Transition:渐变效果 Graphic:勾选标志的图,就是那个勾 Group:多选组 On Value Changed:当选项改变时,触发事件 多选 ...

  8. 禁用IE缓存

    HTTP消息报头包括普通报头.请求报头.响应报头.实体报头. 普通报头中的Cache-Control用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的 ...

  9. 算法:插入排序(Insertion Sort)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. jquery 根据name获取元素的问题

    我要获取name属性为test的元素 但是这个test是赋值给变量的 如var name='test'; 即要获取name属性为变量name的元素 请问jquery怎么写? $("input ...