替换空格

Posted mered1th

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了替换空格相关的知识,希望对你有一定的参考价值。

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

原来的思路是空间换时间,开一个string,遍历一次,如果是空格则拼接string+="%20",否则直接拼接原字母。

剑指offer上的解法:

技术图片
技术图片

class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str == nullptr || length <= 0) return;
        int orilength = 0;
        int numBlank = 0;
        int i = 0;
        while(str[i] != ''){
            ++orilength;
            if(str[i] == ' '){
                ++numBlank;
            }
            ++i;
        }
        int newlength = orilength + numBlank * 2;
        if(newlength > length) return;
        int index_Ori = orilength;
        int index_New = newlength;
        while(index_Ori >= 0 && index_New > index_Ori){
            if(str[index_Ori] == ' '){
                str[index_New--] = '0';
                str[index_New--] = '2';
                str[index_New--] = '%';
            }
            else{
                str[index_New--] = str[index_Ori];
            }
            --index_Ori;
        }
    }
};

相关题目:

技术图片

这里自己用vector实现了一下,因为要改变数组大小,思路同上,也是从后开始比较,这是解决问题的关键。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<string>
#include<cstring>
#include<vector>
using namespace std;

void merge(vector<int> &a, int alength, vector<int> &b, int blength) {
    int newPos = alength + blength - 1;
    int a_oldPos = alength - 1;
    int b_oldPos = blength - 1;
    a.resize(newPos + 1);
    while (a_oldPos >= 0 && b_oldPos >= 0) {
        if (a[a_oldPos] > b[b_oldPos]) {
            a[newPos] = a[a_oldPos];
            a_oldPos--;
        }
        else {
            a[newPos] = b[b_oldPos];
            b_oldPos--;
        }
        newPos--;
    }
    while (a_oldPos >= 0 && newPos >= 0) a[newPos--] = a[a_oldPos];
    while (b_oldPos >= 0 && newPos >= 0) a[newPos--] = b[b_oldPos];
}

int main()
{
    vector<int> a = { 1,3,5,7,9 };
    vector<int> b = { 0,2,4,6,8 };
    merge(a, a.size(), b, b.size());
    int x=5;
    return 0;
}

以上是关于替换空格的主要内容,如果未能解决你的问题,请参考以下文章

如何从主要活动中替换片段

用片段替换时操作栏向下移动

如何在android studio中用另一个片段替换一个片段

用片段替换某些东西

试图替换片段,但它一直显示相同的片段

正则表达式替换markdown文件代码块标记中的所有空格