废话不说,先上代码。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int a[N];
int main()
{
int n;
scanf("%d",&n);
string s;
cin>>s;
int p=0;
for(int i=0;i<n;++i){
if(!(s[i]>='0'&&s[i]<='9'||s[i]=='+'||s[i]=='-'))
a[i]=++p;
for(int i=0;i<n;++i){
if(!(s[i]>='0'&&s[i]<='9'||s[i]=='*'||s[i]=='/'))
a[i]=++p;
for(int i=0;i<n;++i){
if(!(s[i]>='0'&&s[i]<='9'))
cout<<s[i]<<'['<<a[i]<<']';
else
cout<<s[i];
}
return 0;
}
定义a数组,先将非数字、非+-(即*/)的字符的下标当成a数组下标,依次从小到大赋值成p(p=1、2、3······),接着非数字、非*/(即+-)的字符的下标同样操作,如样例所示,1+1+5* 6/2-10*2, 其中,‘+’、‘+’、‘ * ’、‘/’、‘-’、‘ * ’下标依次是1、3、5、7、9、11,则按照先乘除后加减、同级正常的顺序,a[5]=1,a[7]=2,a[11]=3,a[1]=4,a[3]=5,a[9]=6,重跑一边for循环,碰到运算符就取它a数组下标值,输出[p],即可。