POJ3337 Experssion Evaluator

这是一个C++程序,用于解析并计算带有++和--操作符的字符串表达式。程序读取输入的测试用例,处理字符串中的自增和自减操作,并输出表达式的值以及变量的新值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//4_7_22:	Experssion Evaluator ++和--字符串的求值 POJ3337
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
	int i,j,T,value,length,flag[30],alpha[30];
	char sign,enter,str[100],ans[100],org[100];
	scanf("%d%c",&T,&enter);
	while(T --)
	{
		cin.getline(str,1000);
		for(i = 0;i < 26;i ++)
			alpha[i] = i + 1;
		memset(flag,0,sizeof(flag));
		strcpy(ans,str);
		for(i = 0;i < strlen(str);i ++)
			while(str[i] == ' ')
				for(j = i;j < strlen(str);j ++)
					str[j] = str[j + 1];
		strcpy(org,str);
		length = strlen(str);
		i = value = 0;
		while(org[i])
		{
			if(org[i] >= 'a' && org[i] <= 'z')
			{
				if(i > 1 && org[i - 1] == '+' && org[i - 2] == '+')
				{
					str[i - 1] = ' ';
					str[i - 2] = ' ';
					flag[(int)(org[i] - 'a')] = 1;
					alpha[(int)(org[i] - 'a')] += 1;
					for(j = 0;j < length;j ++)
						if(org[j] == org[i])
							str[j] = str[j] + 1;
				}
				else if(i > 1 && org[i - 1] == '-' && org[i - 2] == '-')
				{
					str[i - 1] = ' ';
					str[i - 2] = ' ';
					flag[(int)(org[i] - 'a')] = 1;
					alpha[(int)(org[i] - 'a')] -= 1;
					for(j = 0;j < length;j ++)
						if(org[j] == org[i])
							str[j] = str[j] - 1;
				}
				else if(i < length - 2 && org[i + 1] == '+' && org[i + 2] == '+')
				{
					str[i + 1] = ' ';
					str[i + 2] = ' ';
					flag[(int)(org[i] - 'a')] = 1;
					alpha[(int)(org[i] - 'a')] += 1;
				}
				else if(i < length - 2 && org[i + 1] == '-' && org[i + 2] == '-')
				{
					str[i + 1] = ' ';
					str[i + 2] = ' ';
					flag[(int)(org[i] - 'a')] = 1;
					alpha[(int)(org[i] - 'a')] -= 1;
				}
				else	flag[(int)(org[i] - 'a')] = 1;
				i++;
			}
			else
				i++;
		}
		i = 0;
		sign = '+';
		//printf("%s\n",str);
		while(str[i])
		{
			if(str[i] == ' ')	i++;
			else if(str[i] == '+')	
			{
				sign = '+';
				i ++;
			}
			else if(str[i] == '-')
			{
				sign = '-'; 
				i ++;
			}
			else
			{
				if(sign == '+')		value += (int)(str[i] - '`');
				else				value -= (int)(str[i] - '`');
				i++;
			}
		}
		printf("Expression: %s\n",ans);
		printf("value = %d\n",value);
		for(i = 0;i < 26;i ++)
			if(flag[i] == 1)
				printf("%c = %d\n",(char)(i + 'a'),alpha[i]);
	}
	return 0;
}
/*测试结果:通过POJ3337检测
1
--b+c-++b+b--
Expression: --b+c-++b+b--
value = 5
b = 1
c = 3
请按任意键继续. . .
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值