题目:把字符串中的每个空格替换成"%20"。
思路:直观的做法是从头到尾扫描字符串,遇到空格就做替换,然而由于将一个字符替换成3个字符,我们必须将空格后面的所有字符都后移两个字节。这样没次遇到空格,都会移动字符。对于这种问题,当字符串(或数组)长度变大,从前往后操作时移动次数多时,可以考虑从后往前操作。ps:对于删除字符串中的某些字符时,字符串长度变小,这时候应从前往后操作,如移除字符串中的重复字符。
/*
题目:把字符串中的每个空格替换成"%20"
*/
#include<cstdio>
#include<cstring>
using namespace std;
void ReplaceBlank(char * str)
{
if(str==NULL)
return;
//计算空格数目
int len = strlen(str);
int count = 0;
for(int i =0;i<len;i++)
{
if(str[i] == ' ')
count++;
}
char * tail = str+len+2*count;
*tail-- = 0;
for(int i =len-1;i>=0;i--)
{
if(str[i]==' ')
{
*tail-- = '0';
*tail-- = '2';
*tail-- = '%';
}
else *tail-- = str[i];
}
}
int main()
{
char str[1000001];
while(gets(str))
{
ReplaceBlank(str);
printf("%s\n",str);
}
return 0;
}