求一字符串置换算法
比如将I'm a student转换成student a I'm
要求不新开辟空间,在原字符串上操作,谢谢
[解决办法]
I 'm a student -> tneduts a m' I -> student a m' I
[解决办法]
#include "iostream"
using namespace std;
int main()
{
char src[] = "I'm a student";
size_t len = strlen(src);
for (size_t i = 0, j = len - 1; i < j; ++i, --j)
{
char t = src[i];
src[i] = src[j];
src[j] = t;
}
size_t prev = 0;
char* p = strchr(src, ' ');
while (p)
{
for (size_t i = prev, j = p - src - 1; i < j; ++i, --j)
{
char t = src[i];
src[i] = src[j];
src[j] = t;
}
prev = p - src + 1;
p = strchr(++p, ' ');
}
if (p != &src[len - 1])
{
p = &src[len] - 1;
for (size_t i = prev, j = p - src; i < j; ++i, --j)
{
char t = src[i];
src[i] = src[j];
src[j] = t;
}
}
cout<<src<<endl;
return 0;
}