📄 3.cpp
字号:
#include <cstdio>
#include <cstring>
#include <cmath>
#define max 81
char s[max],save[max];
int len,value[max],pv=0,inc=0;
bool isch(char a)
{
if (a<='z'&&a>='a') return 1;
else return 0;
}
/*bool test()
{
int i,count=0;
bool flag=1;
for (i=1;i<len;i++)
{
if (s[i]==' ') continue;
if (s[i-1]==s[i]) count++;
else
{
if (count%2==0) flag=0;
count=0;
}
if (isch(s[i]))
{
if (isch(s[i-1])||isch(s[i+1])) flag=0;
if ((s[i-1]==s[i-2])&&(s[i+1]==s[i+2])) flag=0;
}
}
if (count%2==0) flag=0;
return flag;
}*/
void get(int x,int y)
{
int temp=0;
bool before=0;
char op;
while (y>=x)
{
if ((x==y)&&(s[x]=='-'||s[x]=='+')) break;
if (s[y]==' ') continue;
if (s[y]==s[y-1])
{
if (s[y]=='-') {temp--;if (!before) inc++;}
else {temp++;if (!before) inc--;}
y-=2;
continue;
}
if (isch(s[y])) {save[++pv]=s[y];y--;before=1;temp+=save[pv]-'a'+1;}
}
if (x==0) op='+'; else op=s[x];
if (op=='+') value[pv]=temp;else value[pv]=0-temp;
}
int main()
{
int i,begin,end,count,tot;
while (gets(s))
{
if (s[0]=='\n') break;tot=0;pv=0;inc=0;
len=strlen(s);begin=0;end=len-1;
//if (test()) cout<<("expression error\n");
count=0;
for (i=0;i<len;i++)
{
if (s[i]==' ') continue;
if (isch(s[i])) count++;
if (count==2)
{
i-=2;
get(begin,i);
begin=i+1;
count=0;
}
if ((s[i]=='-'&&s[i+1]=='+')||(s[i]=='+'&&s[i+1]=='-'))
{
if (begin!=0)
{
if ((i-begin)%2!=0)
{
get(begin,i);
begin=i+1;
i++;
count=0;
}
else
{
get(begin,i-1);
begin=i;
count=0;
}
}
else
{
if ((i-begin)%2==0)
{
get(begin,i);
begin=i+1;
i++;
count=0;
}
else
{
get(begin,i-1);
begin=i;
count=0;
}
}
}
if (i==len-1)
{
get(begin,i);
}
}
printf("Expression:%s\n",s);
for (i=1;i<=pv;i++)
{
tot+=value[i];
}
printf(" value=%d\n",tot+inc);
for (i=1;i<=pv;i++)
{
printf(" %c=%d\n",save[i],abs(value[i]));
}
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -