题目描述 :输入含有数字与字母并且以',' ';' 分开让你分开两行输出子串数字和字母(顺序不变,前导0不算数字(除0外),数字加字母算字母)
1 ≤ |s| ≤ 10^5 
分析:显然是个模拟题,但数据太大数组不好开而且操作也不方便,所以开vector<vector<int> > 比较好些,前导0算作一个特判处理 
ac代码:
#include<bits/stdc++.h>
#define pb(x) push_back(x)
#define sz(x) size(x)
#define ey(x) empty(x)
#define pp()  pop(x)
#define cr(x) clear(x)
#define p(x)  push(x)
#define t(x)  top(x)
#define f(x)  front(x)
#define FOR(i,j,n) for(int i=j;i<n;i++)
#define WE(t) while(t--)
#define mp(x,y) make_pair(x,y)
#define ms(a,x) memset(a,x,sizeof(a))
using namespace std;
vector<vector<char> > vec[2];
int main(){
//    freopen("1.txt","r",stdin);
    ios::sync_with_stdio(0);
    cin.tie(0);
    string s;
    cin>>s;
    int sz=s.length();
    vector<char> temp;
    int flag=1,i=0;
    while(i<sz){
        if(s[i]!=','&&s[i]!=';'){
            temp.pb(s[i]);
            if(!isdigit(s[i])||temp.sz()==1&&s[i]=='0') flag=1;
            else if(temp.sz()==1&&isdigit(s[i])) flag=0;
        }
        else {
            if(flag==1&&(temp.sz()!=1||temp[0]!='0')) vec[1].pb(temp),flag=1;
            else vec[0].pb(temp),flag=1;
            temp.cr();
        }
        i++;
    }
    if(temp.sz()==1&&temp[0]=='0') vec[0].pb(temp);
    else {
        if(flag==1) vec[1].pb(temp);
        else vec[0].pb(temp);
    }
    if(!vec[0].ey()) {cout<<'\"';
        for(int i=0,sz=vec[0].sz();i<sz;i++){
            for(int j=0,sz1=vec[0][i].sz();j<sz1;j++)
                cout<<vec[0][i][j];
            if(i!=sz-1) cout<<',';
        }cout<<'\"';
    }
    else cout<<'-';
    cout<<endl;

    if(!vec[1].ey()){cout<<'\"';
        for(int i=0,sz=vec[1].sz();i<sz;i++){
            for(int j=0,sz1=vec[1][i].sz();j<sz1;j++)
                cout<<vec[1][i][j];
            if(i!=sz-1) cout<<',';
        }cout<<'\"';
    }
    else cout<<'-'<<endl;
}