分离表达式中的数字和运算符

本文介绍了一个简单的C++程序,该程序能够将输入的数学表达式分解为操作数和运算符,并进行排序输出。通过逐字符扫描,程序识别并分离出数字和符号,适用于基本算术表达式的初步解析。

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

#include<iostream>
using namespace std;
void sort(char b[],int n[],char fh[],int &m)
{
	int k,j;
	for(int i=0;i<strlen(b);i++)
	{
		if(b[i]=='+'||b[i]=='-'||b[i]=='*'||b[i]=='/'||b[i]==')')
		{
			k=1;
			j=i-1;
			while(1)
			{	
				if(isdigit(b[j]))
				{
					n[m]+=(b[j]-'0')*k;
					k*=10;
					j--;
				}
				else if(!isdigit(b[j])||j<0)
					break;
			}
			m++;
			fh[m]=b[i];
			m++;
		}
		else if(b[i]=='(')
		{
			fh[m]=b[i];
			m++;
		}
		else if(i==strlen(b)-1)
		{
			k=1;
			j=i;
			while(1)
			{	
				if(isdigit(b[j]))
				{
					n[m]+=(b[j]-'0')*k;
					k*=10;
					j--;
				}
				else if(!isdigit(b[j])||j<0)
					break;
			}
			m++;
		}
		
	}
}
void main()
{	
	char b[100];
	char fh[50]={0};
	int n[50]={0},m=0,i;
	cout<<"Please Input an expression"<<endl;
	cin>>b;
	sort(b,n,fh,m);
	for(i=0;i<m;i++)
	{
		if(fh[i]!=0)
			cout<<fh[i]<<" ";
	}
	cout<<endl;	
	for(i=0;i<m;i++)
	{
		if(n[i]!=0)
			cout<<n[i]<<" ";
	}
	cout<<endl;

}

GP11306 安欣买酸奶 普及- 字符串 NOIp 普及组 模拟 2013 栈 表达式求值 标准IO 传统题 时间限制 1000ms 内存限制 256MB 通过/尝试次数 41/55 来源 洛谷 题目背景 猫叉老师刚才吃完 n n碗曹氏热卤之后,发现自己还是有些小瞧了曹氏的辣度,她的胃开始隐隐作痛,于是委托安欣老师去超市帮她买酸奶,而且要买很多很多的酸奶!!(众所周知酸奶是解辣神器) 由于超市店员忘了给安欣老师小票,于是安欣老师为了更好的找猫叉老师报销酸奶钱,就把买酸奶花的钱写成了一个算数表达式。(安欣其实也想请猫叉老师喝,但是毕竟破产了,还是把酸奶钱要一下吧) 题目描述 给定一个只包含加法乘法的算术表达式,请你编程计算表达式的值。 输入格式 一行,为需要你计算的表达式表达式中只包含数字、加法运算符 + 乘法运算符 *,且没有括号,所有参与运算的数字均为 0 0 到 2 31 − 1 2 31 −1 之间的整数。 输入数据保证这一行只有 0123456789+* 这 12 12 种字符。 输出格式 一个整数,表示这个表达式的值。 注意:当答案长度多于 4 4 位时,请只输出最后 4 4 位,前导 0 0 不输出。 input1 复制代码 1+1*3+4 output1 复制代码 8 input2 复制代码 1+1234567890*1 output2 复制代码 7891 input3 复制代码 1+1000000003*1 output3 复制代码 4 提示 对于 30 % 30% 的数据, 0 ≤ 0≤ 表达式中加法运算符乘法运算符的总数 ≤ 100 ≤100。 对于 80 % 80% 的数据, 0 ≤ 0≤ 表达式中加法运算符乘法运算符的总数 ≤ 1000 ≤1000。 对于 100 % 100% 的数据, 0 ≤ 0≤ 表达式中加法运算符乘法运算符的总数 ≤ 100000 ≤100000 双端队列 c++daima
最新发布
05-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值