您的位置:首页 > 理论基础 > 数据结构算法

数据结构作业栈与队列(STL实现)处理字符串之从中部摇摆输出

2009-10-05 12:12 204 查看
表被题目吓到,所谓从中部摇摆输出即是将一个字串若长度为奇数,则首先输出中间的字母,然后输出中间前边一个字母,然后输出中间后边一个字母,然后输出中间前边的前边的字母,然后输出中间后边的后边的字母……直到输出完毕;偶数的话直接从中部开始重复上述过程,只不过少了一个输出中间字母的步骤。很像左摇一下,右摇一下,故而得名。

for example:abcde 应该输出:cbdae abcd 应该输出:bcad

这个要求可能有更简便的实现方法,但既然是数据结构作业,就用数据结构来做啦。放码子:

#pragma warning(disable:4786)//屏蔽字符名超长警告
#include"stdafx.h"//VS下用到的预编译头文件
#include<iostream>//输出顺序是从中间开始,前一个后一个循环顺次输出
#include<deque>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
char ss[1<<20];
int main()
{
unsigned int i;
char tmp;
string s;
deque<char>de;//接收后半部分字串
stack<char>st;//接收前半部分字串
scanf("%s",ss);//要保证长度为奇数
s=ss;
for(i=0;i<s.length()/2;i++)
st.push(s[i]);
if(s.length()&1)
{
for(i=s.length()/2+1;i<s.length();i++)
de.push_back(s[i]);
printf("%c",s[s.length()/2]);
}
else
{
for(i=s.length()/2;i<s.length();i++)
de.push_back(s[i]);
}
while(!st.empty() && !de.empty())
{
tmp=st.top();
printf("%c",tmp);
st.pop();
tmp=de.front();
printf("%c",tmp);
de.pop_front();
}
printf("/n");;
return false;
}


本题充分利用栈和队列的特点,码子中用了双端对列,安全可以用普通队列代替~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐