#include<iostream>
#include<cassert>
#include<stack>
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') //参数传进来的token并不是s1里的一部分,而是一个单独的字符串,有结束符的
{
const char* p;
for (p = head - 1; p >= rear; p--)//退到'\0'前一个开始,往前到子串开头处,反向压栈
{
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()
{
const char fa[] = "Welcome you, my friend";
const char ss[] = "you";
const char *p=reverse(fa, ss);
cout << "befor reverse is :" << fa << endl ;
cout << "after reverse is:" << p << endl;
return 0;
}
反转字符串,指定子串不反转
最新推荐文章于 2022-07-17 22:41:04 发布