前提:数组必需有多余的空间
1. 先遍历一遍字符串,求出字符串的长度和空格数
2. 求出新字符串的长度
3. 从新字符串的尾部开始将旧字符串开始的不是空格的移动到新字符串的尾部,如果遇到空格,则将用替换的字符放到扩展的位置并移动
例如:
#include <stdio.h>
char* newstring(char* s) //O(n)
{
int i = 0;
int newlen;
int oldlen = 0;
int blanknum = 0;
while(s[i] != '\0')
{
++oldlen;
if(s[i] == ' ')
blanknum++;
i++;
}
newlen = oldlen + blanknum * 2;
while((newlen > oldlen)&&(newlen >= 0)&&(oldlen >= 0))
{
if(s[oldlen] == ' ')
{
s[newlen--] = '0';
s[newlen--] = '2';
s[newlen--] = '%';
}
else
{
s[newlen--] = s[oldlen];
}
oldlen--;
}
return s;
}
int main(void)
{
char string[30] = "We are world ";
printf("%s\n", newstring(string));
return 0;
}