#include<iostream>
#include<iomanip>
#include<list>
#include<cmath>
#include<vector>
#include<assert.h>
#include"Test.h"
void replace(char *s) // 先计算空格总数,然后从后面开始替换,可以计算出空格后面字符的偏移量
{
assert(s!=NULL);
int len =strlen(s);
int i,j;
int x;
for(i=0,x=0;i<len;i++) // 统计空格总数
{
if(s[i]==' ')
x++;
}
int spaceCount=0;
j=len;
for(i=len-1;i>=0;i--)
{
if(s[i]==' ')
{
spaceCount++;
int shift=(x-spaceCount+1)*2; // 计算偏移量
memcpy(&s[i+1+shift],&s[i+1],j-i-1);// 要移动的位置实际是(i,j)下标之间的位置。
memcpy(&s[i+shift-2],"%20",3);
j=i; //
}
}
}
void Test()
{
char s[100]=" We are hap py ";
replace(s);
cout<<s<<endl;
}
void main()
{
Test();
system("pause");
}