题目---替换字符串当中的空格

   这道题目是将字符串中的空格全部转换空格。首先需要扩容,保证字符串可以在正常状态下进行工作。不会导致字符串的容量不够。主要步骤如下:

  1. 循环遍历求得当前字符串中的空格个数
  2. 算出最终被替换后的新字符串的长度
  3. 判断当前字符串是否有足够空间存储替换后的字符串
  4. 从后向前复制,遇到空格将其替换,并将其前两个字符也替换为相应字符。
#include <iostream>
#include <string>
#include <math.h>
#include <string.h>
#include <stddef.h>
#include <stdlib.h>
using namespace std;

class Replacement {
public:
    string replaceSpace(string iniString, int length) {
        int blanknum = 0;
        iniString.reserve(1000);
        for (int i = 0; i < iniString.size(); i++)
        {
            if (iniString[i] == ' ')
                blanknum++;
        }
        int newsize = blanknum * 2 + iniString.size();
        if (iniString.capacity() < newsize)
            return NULL;
        int j = iniString.size() - 1;
        if (blanknum == 0)
            return iniString;
        iniString.resize(newsize,'0');
        for (int i = newsize - 1; i >= 0; i--)
        {
            if (iniString[j] == ' ')
            {
                iniString[i--] = '0';
                iniString[i--] = '2';
                iniString[i] = '%';
                j--;
            }
            else
                iniString[i] = iniString[j--];
        }
        return iniString;
    }
};
int main()
{
    Replacement s;
    string a(" hello world   ");
    cout << s.replaceSpace(a, a.size()) << endl;
    system("pause");
    return 0;
}

   为什么要从后向前复制?
若是从前向后复制的话,会将第一个空格后的字符覆盖,并且影响了所有后面的字符,进而影响了整个字符串。所以我们应该是从后向前复制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值