
以下代码在vs2010测试通过:
/**
* 解题思路:
* 方法-:从头开始遍历数组,遇到一个空格替换一个空格,这样每一次空格后面的字符都需要移动,
假设字符串长度为n,空格数为n,则时间复杂度为:o(n^2)。
方法二:先算出字符串的空格数,替换之后字符串的新的长度是length+blankNumber*2
然后从字符串的结尾开始移动字符,遇到空格直接替换,则所有字符只移动一次,便可以替换所有空格,
其时间复杂度为:o(n)
方法二的代码如下:
*/
#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
void replaceBlank(char str[]);
int _tmain(int argc, _TCHAR* argv[]){
char str[50] = "I am a student.";
printf("before replace:\n");
printf("%s",str);
replaceBlank(str);
printf("\nafter replace:\n");
printf("%s",str);
system("pause");
return 0;
}
void replaceBlank(char str[]){
int i=0;
int length;
int blankNumber = 0;
int originalLength,newLength;
length = strlen(str);
while(str[i] != '\0'){
if(str[i] == ' '){
blankNumber ++ ;
}
i++;
}
originalLength = length;
newLength = originalLength + blankNumber*2;
while(originalLength >= 0 && newLength > originalLength ){
if(str[originalLength] == ' '){
str[newLength--] = '0';
str[newLength--] = '2';
str[newLength--] = '%';
}else{
str[newLength--] = str[originalLength];
}
originalLength-- ;
}
}