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

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

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; }

本题充分利用栈和队列的特点,码子中用了双端对列,安全可以用普通队列代替~

你可能感兴趣的:(数据结构作业栈与队列(STL实现)处理字符串之从中部摇摆输出)