梁越

c++笔试读写模板

0 人看过

分割字符串

#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iomanip>
#include <set>

using namespace std;

/*
如果需要找到下标
int index=s.find(',')
*/

//分割字符串1
vector<int> process(string s){
    vector<int> res;
    stringstream input(s);   //读取str到字符串流中
    string temp;
    //使用getline函数从字符串流中读取,遇到分隔符时停止,和从cin中读取类似
    //注意,getline默认是可以读取空格的
    while(getline(input, temp, ','))
    {
        res.push_back(stoi(temp));
    }
    return res;
}

//分割字符串2
vector<int> mysplit(string str, const char pattern)
{
    vector<int> res;
    stringstream input(str);
    string temp;

    while(getline(input, temp, pattern))
    {
        res.push_back(stoi(temp));
    }
    return res;
}

int main(){
    string s;
    cin>>s;

    s=s.substr(1, s.size()-2);

    vector<int> rains=mysplit(s, ',');

    int n=rains.size();

    vector<int> res(n, -1);

    multiset<int> st;

    for(int i=0;i<n;i++){
        if(rains[i]>0){
            res[i]=-1;
            st.insert(rains[i]);
        }
        else{
            for(int j=i+1;j<n;j++){
                if(rains[j]>0 && st.count(rains[j])){
                    res[i]=rains[j];
                    st.erase(rains[j]);
                    break;
                }
                else if(rains[j]>0){
                    res[i]=rains[j];
                }
            }
        }
    }

    for(int i=0;i<n;i++){
        if(i==0) cout<<'['<<res[i]<<',';
        else if(i==n-1) cout<<res[i]<<']';
        else cout<<res[i]<<',';
    }

    //cout<<rains[rains.size()-1];

    //cout<< fixed << setprecision(2)<<rate<<'%';

    return 0;
}