这个题目的意思是要计算一些c语言表达式的值。这些表达式有+-还有++,--操作符与a-z这些变量组合而成。a-z的权值是1-26。
比如,表达式 c+f--+--a,得出值是9,其它变量的值也需要计算出来。
这个题目感觉比较麻烦,刚开始一点思路也没有,还写了个错误的方法,浪费了时间。
后面我的思路是 对每个变量进行处理!
比如,表达式 c+f--+--a,得出值是9,其它变量的值也需要计算出来。
这个题目感觉比较麻烦,刚开始一点思路也没有,还写了个错误的方法,浪费了时间。
后面我的思路是 对每个变量进行处理!
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define len 120
char s[len];
int d[26],n;
bool st[26];
void deal(int pos,int &sum)
{
int i;
for(i=pos-1; s[i]==' '&&i>=0; i--);
if(i>=0&&s[i]==s[i-1]) //prefix
{
if(s[i]=='-')
--d[s[pos]-'a'];
else
++d[s[pos]-'a'];
for(i-=2; s[i]==' '&&i>=0; i--);
if(s[i]=='-')
sum-=d[s[pos]-'a'];
else
sum+=d[s[pos]-'a'];
}
else //infix
{
if(s[i]=='-')
sum-=d[s[pos]-'a'];
else
sum+=d[s[pos]-'a'];
}
for(i=pos+1; s[i]==' '&&i; i++); //postfix
if(i+1<=n&&s[i]==s[i+1])
{
if(s[i]=='-')
--d[s[pos]-'a'];
else
++d[s[pos]-'a'];
}
}
int main()
{
int i,sum;
while(gets(s)!=NULL)
{
memset(st,0,sizeof(st));
for(i=0; i<26; i++)
d[i]=i+1;
n=(int)strlen(s);
for(i=sum=0; i<n; i++)
if(isalpha(s[i]))
{
deal(i,sum);
st[s[i]-'a']=true;
}
printf("Expression: %s\n value = %d\n",s,sum);
for(i=0; i<26; i++)
if(st[i])
printf(" %c = %d\n",i+'a',d[i]);
}
return 0;
}

本文详细介绍了如何解析并计算包含加减运算符及前缀后缀操作符的C语言表达式,针对变量权值进行了说明,并提供了一个C语言程序实现计算过程。通过实例分析,展示了从无思路到正确解决的全过程。
411

被折叠的 条评论
为什么被折叠?



