ACM日记_17.3.27——偷懒的字符串处理一道

本文介绍了一种使用C++实现的字符串处理方法,通过vector容器来管理堆叠中的元素,实现了元素的移动和堆叠操作。代码展示了如何查找特定元素的位置、清除堆叠上的元素以及将一个堆叠的内容移到另一个堆叠上。

因为是从小伙伴那里拿来的题目,不知出处,只好归为日记下的一篇。

这道题目很简单,代码也不是我敲的咳咳咳,但是字符串处理乍一看真是挺吓人,不过稍稍用点string类就瞬间简单许多,遂记之。

题目:













代码如下:

//3.26
#include <cstdio>
#include <vector>
#include <iostream>
#include <string>
using namespace std;
const int maxn=30;
int n;
vector <int> pile[maxn];

void find_block(int a,int& pa,int &ha)
{
    for(pa=0;pa<n;pa++)
        for(ha=0;ha<pile[pa].size();ha++)
    {
        if(pile[pa][ha]==a)
            return;
    }
}

void clear_above(int pa,int ha)
{   int i;
    for(i=ha+1;i<pile[pa].size();i++)
    {
        int b=pile[pa][i];
        pile[b].push_back(b);
    }
    pile[pa].resize(ha+1);
}

void pile_onto(int pa,int ha,int pb)
{   int i;
    for(i=ha;i<pile[pa].size();i++)
    {
        pile[pb].push_back(pile[pa][i]);
    }
    pile[pa].resize(ha);
}

void print()
{   int i,j;
    for(i=0;i<n;i++)
    {    printf("%d:",i);
        for(j=0;j<pile[i].size();j++)
        printf(" %d",pile[i][j]);
        printf("\n");
    }
}


int main(){
    int a,b;
    string s1,s2;
    cin >> n;
    for(int i=0;i<n;i++)
    {
        pile[i].push_back(i);
    }
    while(cin >> s1>> a >> s2 >> b)
    {   if(s1=="quit")
        break;
        int pa,pb;
        int ha,hb;
        find_block(a,pa,ha);
        find_block(b,pb,hb);

        if(pa==pb)
        continue;

        if(s1=="move")
            clear_above(pa,ha);
        if(s2=="onto")
            clear_above(pb,hb);
        pile_onto(pa,ha,pb);
    }
    print();
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值