剑指offer面试题[4]-空格替换
2017-05-31 20:11
330 查看
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。以输入hello word为例分析:
代码及相应注释如下
#include <iostream>
using namespace std;
class Solution {
public:
void replaceSpace(char *str,int length) //lengt为字符数组str的大小
{
int number_space=0;
int str_length=0;
if(str==NULL||length<=0)
return;
for(int i=0;i<length;i++)
{
if(*(str+i)==' ')
number_space++;
if(*(str+i)!='\0')
str_length++;
}
int new_str_length=str_length+number_space*2;
char *p1=str+str_length-1; //注意类型指针是字符类型, 指针p1为指向原始str的末尾最后一个字符(非‘\0’)。
char *p2=str+new_str_length-1; //指针p2为指向扩展后str的末尾最后一个位置(非‘\0’)。
for(int i=str_length-1;i>=0;i--)
{
if(*p1!=' ') //如果原始str的当前位置不为空,需要将其值赋给扩展数组
{ //相应的p1和p2都向前移动一个位置
*p2=*p1;
p1--;
p2--;
}
else //如果原始str的当前位置为空,则需要将扩招数组的连续三个元素赋为%20
{
*p2='0'; //特别需要注意的是这里的倒序输入,先0再2最后%
*(p2-1)='2';
*(p2-2)='%';
p1--;
p2=p2-3; //注意这里3
}
}
}
};
//主函数
void main()
{
char str[20]={"hello world"}; //注意这里的str大小一定要大于等于替换后的大小
int length=12;
Solution s;
s.replaceSpace(str,length);
cout<<str<<endl;
}
方法2:
/*class Solution {
public:
void replaceSpace(char *str,int length)
{
int m = 0;
for(int i = 0;i<length;i++)
{
if(*(str+i) == ' ')
{
m= i;
length += 2;
for(int j = length -1;;j--)
{
if(j -2 == m)
break;
else
*(str+j) = *(str+j-2);
}
*(str+m) = '%';
*(str+m+1)= '2';
*(str+m+2) = '0';
}
}
}
};*/
结果:
相关文章推荐
- 剑指offer之面试题4:替换空格
- 【练习笔记】剑指offer-面试题4 :替换空格
- 剑指offer-面试题04-替换空格
- 【剑指offer】 面试题4: 替换空格
- 剑指offer-面试题4.替换空格
- 剑指offer面试题4 替换空格
- 剑指Offer面试题5:替换空格程序调试与错误解决方法
- 剑指offer-面试题4:替换空格
- 剑指Offer面试题4(Java版):替换空格
- 剑指Offer:面试题4 替换空格
- [剑指offer][面试题04]实现一个函数,将字符串中的空格替换为“ ”.例如输入“we are happy.”,输出"we are happy.".
- 剑指offer面试题4:替换空格和合并两个有序数组
- 剑指offer面试题4-- 替换空格
- 【剑指Offer学习】【面试题4 : 替换空格】
- 剑指Offer面试题2:替换空格
- 剑指offer——面试题4:替换空格
- 【剑指Offer】面试题4:替换空格
- 剑指offer-面试题4:替换空格