#include <iostream>
#include <cassert>
#include <stack>
#include <cstring>
using namespace std;
const char* reverse(const char* s1,const char* token)
{
stack<char>stack1;
const char* ptoken=token,*head=s1,*rear=s1;
assert(s1 && token);//字符串为空就直接返回
while(*head!='\0')
{
while(*head!='\0'&&*ptoken==*head)
{
ptoken++;
head++;
}
if(*ptoken=='\0')
{
const char* p;
for(p=head-1;p>=rear;p--)
{
stack1.push(*p);
}
ptoken=token;
rear=head;
}
else
{
stack1.push(*rear++);
head=rear;
ptoken=token;
}
}
char* pReturn=new char[strlen(s1)+1];
int i=0;
while(!stack1.empty())
{
pReturn[i++]=stack1.top();
stack1.pop();//?
}
pReturn[i]='\0';
return pReturn;
}
int main(){
char welcome[]="Welcome you,my friend";
char token[]="you";
const char *pRev=reverse(welcome,token);
cout<<"before reverse:"<<endl;
cout<<welcome<<endl;
cout<<"after reverse:"<<endl;
cout<<pRev<<endl;
return 0;
}
这个程序实现的功能是将指定字符子串之外的字符串全部反转输出,字符子串位置不变。
使用了标准库的stack,即栈。