视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
面试题2:替换空格
2020-11-09 08:03:42 责编:小采
文档


来源:《剑指Offer》 题目:请实现一个函数,把字符串的每个空格替换成”%20”,原字符串后面有足够的空间,要求在原字符串上操作。例如输入”we are happy”,则输出”we%20are%20happy”。 分析:先遍历一遍统计出空格数,一个空格替换成三个字符,长度增

来源:《剑指Offer》

题目:请实现一个函数,把字符串的每个空格替换成”%20”,原字符串后面有足够的空间,要求在原字符串上操作。例如输入”we are happy”,则输出”we%20are%20happy”。

分析:先遍历一遍统计出空格数,一个空格替换成三个字符,长度增加了2,N个空格,长度增加2N。则
替换后的字符串长度 = 原字符串长度 + 2N
设置两个指针,一个指向原字符串末尾,一个指向新字符串末尾。第二遍遍历,从后往前遍历。将原字符串最后一个字符复制到新字符串最后一个字符的位置,两个指针同时前移。当原字符串遇到空格,在新字符串对应位置插入”%20”三个字符,接着原字符串指针前移1位,新字符串指针前移3位。如此操作,直到原字符串第一个字符也复制完结束。

代码(C++):

#include
using namespace std;

#define MAX_LEN 100

/*
 函数功能:替换字符串中的空格
 */
void replaceBlank(char data[])
{
 int i=0,j;
 int old_len;
 int new_len;
 int blank_num=0;
 // 遍历一遍,找出空格数
 while(data[i]!='\0')
 {
 if(data[i]==' ')
 {
 blank_num++;
 }
 i++;
 }
 //-----------这里是关键------------

 // 原来字符串长度
 old_len=i+1;
 // 计算新字符串长度
 new_len=old_len+2*blank_num;
 // 重置i,j
 i=old_len-1;
 j=new_len - 1;

 //-----------这里是关键------------


 // 再遍历一遍,替换空格
 while(i>=0)
 {
 if(data[i]!=' ')
 {
 data[j]=data[i]; 
 j--;
 }
 else
 {
 data[j]='0';
 data[j-1]='2';
 data[j-2]='%';
 j-=3;
 }
 i--;
 }

}
int main()
{
 char str[MAX_LEN];// 声明一个字符数组

 // 输入数组
 cout<<"请输入一个字符串,不超过20个字符"<

下载本文
显示全文
专题