UVA_327_Evaluating Simple C Expressions

本文介绍了一个算法,用于解析包含加减运算符和字母的字符串,并评估其值。算法通过映射字符到整数值,处理字符串中的运算符和字母组合,最终输出表达式的值及各字母对应的值。

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

#include<iostream>    
#include<sstream>    
#include<string>    
#include<vector>    
#include<list>    
#include<set>    
#include<map>    
#include<stack>    
#include<queue>    
#include<algorithm>  
#include<bitset>
#pragma warning(disable:4996)    
using std::cin;
using std::cout;
using std::endl;
using std::stringstream;
using std::string;
using std::vector;
using std::list;
using std::pair;
using std::set;
using std::multiset;
using std::map;
using std::multimap;
using std::stack;
using std::queue;
using std::priority_queue;
using std::bitset;
void evaluate(const string &str)
{
	map<char, int>char_val;
	char Operator = '+';
	int sum = 0;
	for (size_t i = 0; i < str.size();)
	{
		if (str.size() - i >= 3)
		{
			if (str[i] == '+'&&str[i + 1] == '+'&&isalpha(str[i + 2]))
			{
				if (Operator == '+')
				{
					sum += str[i+2] - 'a' + 2;
				}
				else
				{
					sum -= str[i+2] - 'a' + 2;
				}
				char_val.insert({ str[i+2],str[i+2]-'a' + 2 });
			}
			else if (str[i] == '-'&&str[i + 1] == '-'&&isalpha(str[i + 2]))
			{
				if (Operator == '+')
				{
					sum += str[i+2] - 'a';
				}
				else
				{
					sum -= str[i+2] - 'a';
				}
				char_val.insert({ str[i+2],str[i+2] - 'a' });
			}
			else if (isalpha(str[i]) && str[i + 1] == '+'&&str[i + 2] == '+')
			{
				if (Operator == '+')
				{
					sum += str[i] - 'a' + 1;
				}
				else
				{
					sum -= str[i] - 'a' + 1;
				}
				char_val.insert({ str[i],str[i] - 'a' + 2 });
			}
			else if (isalpha(str[i]) && str[i + 1] == '-'&&str[i + 2] == '-')
			{
				if (Operator == '+')
				{
					sum += str[i] - 'a' + 1;
				}
				else
				{
					sum -= str[i] - 'a' + 1;
				}
				char_val.insert({ str[i],str[i] - 'a' });
			}
			else
			{
				goto sign;
			}
			i += 3;
		}
		else
		{
		sign:
			if (isalpha(str[i]))
			{
				if (Operator == '+')
				{
					sum += str[i] - 'a' + 1;
				}
				else
				{
					sum -= str[i] - 'a' + 1;
				}
				char_val.insert({str[i],str[i]-'a'+1});
			}
			else
			{
				Operator = str[i];
			}
			i++;
		}
	}
	cout << "    value = " << sum << endl;
	for (auto iter = char_val.begin(); iter != char_val.end(); iter++)
	{
		cout << "    " << iter->first << " = " << iter->second << endl;
	}
}
string clear_space(const string &str)
{
	string ret;
	for (size_t i = 0; i < str.size(); i++)
	{
		if (!isspace(str[i]))
		{
			ret.push_back(str[i]);
		}
	}
	return ret;
}
int main()
{
	//freopen("input.txt", "r", stdin);    
	//freopen("output.txt", "w", stdout);
	string expression;
	while (getline(cin, expression))
	{
		cout << "Expression: " << expression << endl;
		expression = clear_space(expression);
		evaluate(expression);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值