废话不说,先上代码。

#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],即可。