【面试题】剑指offer04--替换字符串中的空格

来源:互联网 发布:编程中输出怎么写 编辑:程序博客网 时间:2024/05/22 13:08
请实现一个函数,把字符串中的每个空格替换成“%20”。

例如:输入“We are happy.”则输出“We%20are%20happy.”

首先,我们可以画图来表示:


当我们需要将空格换成%20 的时候,则一个空格就要变成三个空格来替换成%20,如图所示:


代码实现的时候,并不是变成三个,而是每有一个空格,则就在将原来的长度上增加2倍的空格的长度。

NewLen = OldLen + BlankNum * 2;
在实现代码的时候,首先要定义算出原来的长度Oldlen,字符串中的空格的个数BankNum,根据空格的个数算出替换字符串后的新数组的长度

第一步是计算原数组的长度和空格的个数:

while (arr[OldLen] != '\0')//当没有到字符串结尾处时,继续执行{if (arr[OldLen] == ' ')//当遇到空格时,空格个数增加1;{BlankNum++;}OldLen++;//只要数组没有到达结尾,length1就增加1}
接下来就是进行空格的替换:

while (OldBack != 0){if (arr[OldBack] == ' '){arr[NewBack--] = '0';arr[NewBack--] = '2';arr[NewBack] = '%';}else{arr[NewBack] = arr[OldBack];}OldBack--;NewBack--;}
还有打印数组的函数的实现。

以下是完整的代码:

//请实现一个函数,把字符串中的每个空格替换成“%20”。//例如:输入“We are happy.”则输出“We%20are%20happy.”。#include<iostream>using namespace std;#include<assert.h>void ReplaceBlank(char *arr){assert(arr);//先统计字符串的实际长度和空格的个数int OldLen = 0;//定义数组的实际长度int NewLen = 0;int BlankNum = 0;//定义计算数组中的空格的个数int NewBack = 0;int OldBack = 0;while (arr[OldLen] != '\0')//当没有到字符串结尾处时,继续执行{if (arr[OldLen] == ' ')//当遇到空格时,空格个数增加1;{BlankNum++;}OldLen++;//只要数组没有到达结尾,length1就增加1}NewLen = OldLen + BlankNum * 2;//替换空格后的数组的长度等于原来的长度+空格的长度乘以2OldBack = OldLen - 1;NewBack = NewLen - 1;while (OldBack != 0){if (arr[OldBack] == ' '){arr[NewBack--] = '0';arr[NewBack--] = '2';arr[NewBack] = '%';}else{arr[NewBack] = arr[OldBack];}OldBack--;NewBack--;}}void PrintArr(char arr[])//打印数组的函数 {int len = strlen(arr);int i = 0;for (i = 0; i < len; ++i){cout << arr[i];}cout << endl;}int main(){char arr[20] = "We are happy.";cout << "替换前的字符串:";PrintArr(arr);ReplaceBlank(arr);cout << "替换后的字符串:";PrintArr(arr);system("pause");return 0;}
代码实现的结果:








0 0
原创粉丝点击