要求:写一个函数,将字符串中的空格替换为%20.
样例:
"abc de f"; // 替换前
"abc%20de%20f" //替换后
看到这个题很多人的想法是在重新申请一个数组,然后遍历原数组,依次将原数组非空格字符赋给新创建的数组,碰到空格后直接用%20进行替换,直到将原数组遍历结束即可,然后再将新数组进行遍历输出即可得到.
那还有没有其他方法?
我们可以先对原数组进行遍历,计算出空格个数cout.再用空格个数对原数组进行扩容.newlen=len+2*cout.
接下来我们就可以进行以下操作:
代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//要求写一个函数,将字符串中的空格用%20代替,要求时间复杂度O(n) 空间复杂度O(n)
void SpaceReplace(char*arr, int len)
{
//计算空格数
int cout = 0;
char *p = arr;
while ((*p)!='\0')
{
if (*p == ' ')
{
++cout;
}
p++;
}
int newlen = len + cout * 2;
int p1 = len;
int p2 = newlen;
while (p1>0 && p2>p1)
{
if (arr[p1]==' ')
{
arr[p2] = '0';
arr[p2 - 1] = '2';
arr[p2 - 2] = '%';
p2 = p2 - 3;
p1--;
}
else
{
arr[p2] = arr[p1];
p2--;
p1--;
}
}
}
int main()
{
char arr[] = "abc de f" ;
//int len = sizeof(arr)/sizeof(arr[0]);
int len = strlen(arr);
SpaceReplace(arr, len);
printf("%s\n", arr);
system("pause");
return 0;
}