剑指offer-替换空格

来源:互联网 发布:根据网络安全法的规定 编辑:程序博客网 时间:2024/06/07 14:48

题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路1:从前到后或从后到前进行遍历,发现空格则用“%20”替换,时间复杂度O(n^2);
思路2:先遍历数组得出空格数,增加数组有效长度,后通过两个不同的指针P1,P2一个指向原数组,一个指向增加长度后的数组,未发现空格时进行替换,发现空格时P1--,P2--三次即可。贴出代码:::
//请实现一个函数,将一个字符串中的空格替换成“%20”。//例如,当字符串为We Are Happy.则经过替换之后的字符串为//We%20Are%20Happy。#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;//方法一:从尾到头获取空格处并替换//时间复杂度O(n^2)void Replace(char *str, int length){int j = 0;int len = length;int k = 0;for (int i = length - 1; i >= 0; i--){if (str[i] == ' '){//str[i] = '0';j = i;for (k = length - 1; k>j; k--){str[k + 2] = str[k];}str[j] = '%';str[j + 1] = '2';str[j + 2] = '0';length = length + 2;}}}//方法二:先遍历数组获取空格数,后通过定义两个不同指针对其进行替换。//时间复杂度:O(n)void Replace1(char str[],int length){int num = 0;int nlength = 0;int olength = length - 1;for (int i = 0; i < length; i++)if (str[i] == ' ')num++;//获取扩展后的长度nlengthnlength = olength+2 * num;//赋值操作while (olength >= 0 && nlength > olength){if (str[olength] == ' '){str[nlength--] = '0';str[nlength--] = '2';str[nlength--] = '%';}else{str[nlength--] = str[olength];}olength--;}}int main(){char str[10] = "We Are Fa";char str1[100];strcpy(str1,str);Replace1(str1,10);cout << str1 << endl;return 0;}

0 0
原创粉丝点击