剑指offer--(2.3.3)面试题4:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如:输入“We are happy.”,则输出“We%20are%20happy.”。
解决方法:先遍历一遍字符串,统计空格总数,确定计算出替换之后的总长度。然后用两个指针从后向前移动,遇到空格则将“%20”三个字符插入,直到遍历完。过程如下图:
解题思路清楚后,代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <assert.h>
#include <string.h>
//length为字符数组string的总容量
int ReplaceBlank(char string[],int length)
{
if(string == NULL && length <= 0)
{
return 0;
}
//originalLength为字符串string的实际长度
int originalLength = 0;
int numberOfBlank = 0;
int i = 0;
while(string[i] != '\0')
{
++ originalLength;
if(string[i] == ' ')
++ numberOfBlank;
++ i;
}
//newLength为把空格换成‘%20’之后的长度
int newLength = originalLength + numberOfBlank * 2;
if(newLength > length)
return 0;
int indexOfOriginal =originalLength;
int indexOfNew = newLength;
while(indexOfOriginal >= 0 && indexOfNew >indexOfOriginal)
{
if(string[indexOfOriginal] == ' ')
{
string[indexOfNew --] = '0';
string[indexOfNew --] = '2';
string[indexOfNew --] = '%';
}
else
{
string[indexOfNew --] = string[indexOfOriginal];
}
-- indexOfOriginal;
}
return numberOfBlank;
}
int main()
{
//注意,我用这种输入形式试过,不能检测出空格的个数,如果大佬解决了,评论一下,谢谢啦
//char s[]={"We are happy."};
char s[20];
s[0]='W';
s[1]='e';
s[2]=' ';
s[3]='a';
s[4]='r';
s[5]='e';
s[6]=' ';
s[7]='h';
s[8]='a';
s[9]='p';
s[10]='p';
s[11]='y';
s[12]='.';
s[13]='\0';
printf("%s\n",s); //输出原始数组内容
int length = sizeof(s)/sizeof(s[0]);//原始数组长度
printf("%d\n",length);
printf("%d\n",ReplaceBlank(s,length));//将空格换成20%
printf("%s",s);//输出替换后的内容
}
注意:我用这种输入形式试过,不能检测出空格的个数,如果大佬解决了,评论一下,谢谢啦
char s[]={"We are happy."};
输出结果: