题意:给出一个C语言加减法表达式,求出这个表达式的最终结构,以及各个变量的值,每个变量保证至出现一次,保证输入的字符串合法;

输入:一串包含+、-和小写的26个英文字母;

输出:表达式的结果,以及表达式中各变量的最终值;

解题思路:一个合法的C语言表达式,只包含空格、操作符(+、-)、变量(a-z);首先要处理前缀(+、-)和后缀(+、-)使表达式可以计算;在处理前缀和后缀问题时要注意前后缀与变量之间的空格,像表达式(++    a- --b +c     --)是合法的;所以可以用两个数组(char int)模拟两个栈,分别用来存放操作符以及变量值,然后再用一个数组(int)来记录变量的前后缀以及变量是否在表达式里出现过。然后先考虑空格,再考虑变量(如果是变量则有可能后缀+、-),最后考虑操作符(如果是操作符则有可能前缀+、-);至此思路就清晰了。

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<ctype.h>
#define MAXN 1000
using namespace std; int num[];//记录出现过的字符;
char str[MAXN];
char data1[MAXN];//记录操作符;
int data[MAXN];//记录变量值; int main(){
int n,i,len;
while(gets(str)){
for(i=;i<;i++)num[i]=-MAXN;
int cnt=,cnt1=,flag=;
len=strlen(str);
for(i=;i<len;i++){
if(str[i]==' ')continue;
else if(isalpha(str[i])){
flag=str[i]-'a'+;//标记有字符出现;
data[cnt++]=str[i]-'a'+;
num[str[i]-'a']=;
}
else {
if(str[i+]==str[i]){//连续两个操作符;
if(!flag){//没有字符出现的情况;
int j;
for(j=i+;j<len;j++)
if(isalpha(str[j]))break;
if(str[i]=='-'){
data[cnt++]=str[j]-'a';
num[str[j]-'a']=-;
}
else {
data[cnt++]=str[j]-'a'+;
num[str[j]-'a']=;
}
i=j;
}
else {//有字符出现的情况;
if(str[i]=='-')num[flag-]=-;
else num[flag-]=;
data[cnt]=flag;
i++;
}
}
else data1[cnt1++]=str[i];
flag=;//更新标志;
}
}
int sum=,t=,j=;
printf("Expression: %s\n",str);
for(i=;i<cnt;i++){
sum+=data[i]*t;
if(data1[j++]=='-')t=-;
else t=;
}
printf(" value = %d\n",sum);
for(int i=;i<;i++)
if(num[i]>=-)printf(" %c = %d\n",i+'a',+i+num[i]);
}
return ;
}

uva-327的更多相关文章

  1. uva 327 Evaluating Simple C Expressions 简易C表达式计算 stl模拟

    由于没有括号,只有+,-,++,--,优先级简单,所以处理起来很简单. 题目要求计算表达式的值以及涉及到的变量的值. 我这题使用stl的string进行实现,随便进行练手,用string的erase删 ...

  2. UVA 327 -Evaluating Simple C Expressions(栈)

    Evaluating Simple C Expressions The task in this problem is to evaluate a sequence of simple C expre ...

  3. uva 327 - Evaluating Simple C Expressions

     Evaluating Simple C Expressions  The task in this problem is to evaluate a sequence of simple C exp ...

  4. Fast Matrix Operations(UVA)11992

    UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...

  5. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  6. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  7. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  8. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  9. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  10. UVA数学入门训练Round1[6]

    UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...

随机推荐

  1. Grub实践

    为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区: (1) 为硬盘新建两个主分区:并为其安装grub: (2) 为硬盘的第一个主分区提供内核和ramdisk文件: 为第二个分区提供ro ...

  2. 第四十一章 微服务CICD(3)- jenkins + gitlab + webhooks + publish-over-ssh(1)

    一.作用 使用webhooks来实现当git客户端push代码到gitlab后,jenkins会立即去gitlab拉取代码并构建. 二.步骤 1.安装插件 ruby_runtime(Hook插件依赖于 ...

  3. [题解]codevs1001 舒适的路线

    h3 { font-family: Consolas; color: #339966 } .math { font-family: Consolas; color: gray } 题目描述 Descr ...

  4. JavaScript之作用域和引用类型

    学习js高级程序设计第四.五章 4.1基本类型和引用类型的值:基本类型值指的是简单的数据段,引用类型值指可能由多个值构成的对象. 引用类型的值是保存在内存中的对象,不能直接访问,而是按引用访问(类似指 ...

  5. bootstrap-标题

    1.重置了margin-top和margin-bottom的值,h1到h3重置后margin-top的值都是20px:h4到h6重置后的值都是10px: 2.所有标题的行高都是1.1(也就是font- ...

  6. AngularJs自定义指令详解(8) - priority

    priority 默认值为0. 当一个元素上声明两个指令,而且它们的priority一样,谁先被调用?这个需要分情况讲.下面先给个例子: <!DOCTYPE html> <html& ...

  7. ActionBarSherlock环境搭建

    1.在官网http://actionbarsherlock.com/下载ActionBarSherlock包解压到. 2.创建自己的Android工程: 3.File -> New ->  ...

  8. ubuntu安装jdk

    首先,从http://java.sun.com或者http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archiv ...

  9. windows获取硬盘使用率等信息

    #coding=utf8 import psutil cpu = {'user' : 0, 'system' : 0, 'idle' : 0, 'percent' : 0} mem = {'total ...

  10. oracle数据库升级记(记一次10.2.0.3版本升级到11.2.0.1版本的过程)

    操作系统:windows xp 已有数据库版本:10.2.0.3 升级目标版本:11.2.0.1 步骤大纲: 在源操作系统(安装有10.2.0.3数据库的操作系统)上安装11.2.0.1数据库软件,然 ...