替换数字(双指针思路+代码实现)

题目

述

①双指针思路

1.先统计一下要替换元素的个数

目的:扩容字符串

2.fast指向新字符串的尾部,slow指向旧字符串的尾部

slow指针用于判断,fast指针是指向待填充的位置
当slow遍历完就是结束的时候。同时slow==fast

3.更详细的思路参照:代码随想录。但代码实现有些不同!

②代码实现

#include<iostream>
#include<string>

using namespace std;

int length(string s) {

    int cnt = 0;
    for (int i = 0; i < s.size(); i++) {

        if (s[i] >= '0' && s[i] <= '9') {
            cnt++;
        }

    }

    return cnt;

}

int main()
{
    const char num[]="number";
    string s;
    cin >> s;

    //————下面是扩容过程
    int len = length(s);//取得需要替换的个数
    int agoLength = s.size();//记录初始字符串的个数

    
    s.resize(s.size()+5*len);//替换数字,需要扩容字符串
 
    //————上面是扩容过程
    
    //定义快慢指针(快指针填充,慢指针判断)
    int slow = agoLength - 1;
    int fast = s.size() - 1;


    //开始替换(快指针填充,慢指针判断)
    while (slow<fast) {//在替换结束之前:slow<fast恒成立

        if (s[slow] >= '0' && s[slow] <= '9') {//匹配到,开始填充

            //其实可以使用一个数组存放number!
            //然后通过遍历这个数组替换数组s的值。
            for(int i = 5 ; i>=0 ; i--){//因为number最后一个索引是5,从后往前填充
                s[fast--]=num[i];
            }
                
            slow--;
        }

        else {
            s[fast--] = s[slow--];
        }


    }

    cout << s;

    return 0;
}
  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值