因为是从小伙伴那里拿来的题目,不知出处,只好归为日记下的一篇。
这道题目很简单,代码也不是我敲的咳咳咳,但是字符串处理乍一看真是挺吓人,不过稍稍用点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;
}
本文介绍了一种使用C++实现的字符串处理方法,通过vector容器来管理堆叠中的元素,实现了元素的移动和堆叠操作。代码展示了如何查找特定元素的位置、清除堆叠上的元素以及将一个堆叠的内容移到另一个堆叠上。

395

被折叠的 条评论
为什么被折叠?



