题目:URL中不允许出现空格等特殊字符,因此需要将用户输入的URL转义输出。如空格对应的ASCII码为32 即0x20,因此用%20代替。如 "we are one" 变换成"we%20are%20one"。要求程序的时间复杂度为O(n)。
思考:
方法一:从头到尾遍历,找到空格后,依次将空格后面元素后移两位,插入%20,然后遍历一遍即可完成。由于每次出现空格都需要将后面的所有元素做移动处理,因此这种方法的时间负责度为O(n^2)。
方法二:事先遍历一遍字符串,确定空格的个数,从而确定新字符串的长度,然后从尾部开始,逐一复制原始字符串元素到新的位置上,遇到空格时,新元素中插入0 2 %,原始元素指针后移一个单元即可。
前提:存储容量,确保原始字符数组大小足够容纳新的字符串。
这种算法的时间复杂度为O(n),很好的提高了效率。
#include "stdafx.h"
#include <iostream>
#include "string"
using namespace std;
void ReplaceBlank(char *p, int length);
int _tmain(int argc, _TCHAR* argv[])
{
char *str = "we are one";
char str2[20];
strcpy_s(str2,str);
ReplaceBlank(str2,20);
cout << str << endl;
cout << str2;
return 0;
}
void ReplaceBlank(char *p, int length)
{
if (p == NULL || length <= 0)
return;
//统计字符串长度
int original_length = 0;
int num_blank = 0;
int i = 0;
while (p[i] != '