我想到了从前往后移,不过时间复杂度是O(n^2),从后往前移,时间复杂度可以降到O(n)。下面是O(n)的代码:
#include <stdio.h>
#define LENGTH 100
void replaceSpace(char *str, int length)
{
int i = 0;
int numberOfChar = 0;
int numberOfSpace = 0;
int indexOfOriginal = 0;
int indexOfNew = 0;
if(str == NULL || length <= 0) return;
while(str[i] != '\0')
{
numberOfChar++;
if(str[i] == ' ')
{
numberOfSpace++;
}
i++;
}
indexOfOriginal = numberOfChar;
indexOfNew = numberOfChar + numberOfSpace * 2;
if(indexOfNew > length) return;
while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
{
if(str[indexOfOriginal] == ' ')
{
str[indexOfNew--] = '0';
str[indexOfNew--] = '2';
str[indexOfNew--] = '%';
}else
{
str[indexOfNew--] = str[indexOfOriginal];
}
indexOfOriginal--;
}
}
void main()
{
int i;
char str[LENGTH] = "We are happy.";
replaceSpace(str, LENGTH);
printf("替代空格后的字符串为:\n");
for(i = 0; str[i] != '\0'; i++)
{
printf("%c", str[i]);
}
printf("\n");
}
运行结果: