2替换空格

题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 
记忆:找到空格数量,找到copy后最后一个字符的位置,然后使用一个for循环,中间ij变量,分为有空格和无空格的拷贝。记住需要对str变量进行copy一份,在统计空格。
class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str == nullptr || length < 0){
            return;
        }
        int oldLen = strlen(str),newLen = 0;
        int spaceNum = 0;
        char* idx = str;
        while(*idx != '\0'){
            if(*idx == ' '){
                ++spaceNum;
            }
            ++idx;
        }
        newLen = oldLen + 2 * spaceNum;
        if(newLen > length){
            return;
        }
        for(int i= oldLen,j = newLen;i >= 0 && j >= 0;--i,--j){
            if(str[i] == ' '){
                str[j] = '0';
                str[j - 1] = '2';
                str[j - 2] = '%';
                j = j  - 2;
            }
            else{
                str[j] = str[i];
            }
        }
        return;
    }
};

 

 

变式题:

有两个排序的数组A和B,内存在A的末尾有足够多的空余空间容纳B,请实现一个函数,把B中的所有数字都插入到A中并且所有的数字是有序的。

#include<iostream>
#include<vector>
using namespace std;
#define N 20
#define M 2
void func(vector<int> &a,vector<int> &b) {
    if (a.size() == 0) {
        return;
    }
    int totalSize = 2 * M - 1;
    int i = M - 1, j = M - 1;
    for (i,j; i >= 0 && j >= 0;) {
        if (a[i] > b[j]) {
            a[totalSize] = a[i--];
        }
        else {
            a[totalSize] = b[j--];
        }
        --totalSize;
    }
    if (j >= 0) {
        for (int k = 0; k <= j; ++k) {
            a[k] = b[k];
        }
    }
}
int main() {
    vector<int> a(N, 0);
    vector<int> b(M, 0);
    for (int i = 0; i < M; ++i) {
        a[i] = i;
        b[i] = i + 2;
    }
    func(a, b);
    for (int i = 0; i < 2 * M; ++i) {
        cout << a[i] << " ";
    }
    cout << endl;
    system("pause");
}

 

posted @ 2017-11-20 21:43  zqlucky  阅读(152)  评论(0编辑  收藏  举报