3、C++算法之代码随想录(字符串)——替换数字

(1)问题

        54. 替换数字(第八期模拟笔试) (kamacoder.com)

题目描述

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

输入描述

输入一个字符串 s,s 仅包含小写字母和数字字符。

输出描述

打印一个新的字符串,其中每个数字字符都被替换为了number

输入示例
a1b2c3
输出示例
anumberbnumbercnumber
(2)思路

        找到输入字符串的数字个数,然后创建一个新的大小的字符串,然后从两个字符串的最后开始往前填入字符,遇到数字,就替换成number。最后输出结果字符串即可。

(3)解题流程

        1.创建输入字符串,替换的字符串和一个统计数字出现次数的变量。

        2.输入字符串,遍历,记录数字出现的次数。

        3.创建新的字符串。大小为原来的字符串大小再加上5*数字出现的次数。(这个需要自己计算下)

        4.定义两个变量遍历两个字符串。

        5.判断字符串是否为数字,如果是就往新的字符串存入number。如果不是就直接复制到新的字符串。

        6.最后输入新的字符串。

代码实现:

#include<iostream>
using namespace std;

int main()
{
    string str1;
    string number = "number";
    int numsize = 0;

    cin>>str1;

    for(char s:str1)
    {
        if(s>='0'&&s<='9') numsize++;
    }

    string str2(str1.size()+5*numsize,'0');
    int i=str1.size()-1;
    int j=str2.size()-1;

    while(i>=0)
    {
        if(str1[i]>='0'&&str1[i]<='9')
        {
            for(int k=number.size()-1;k>=0;k--)
                str2[j--] = number[k];
        }
        else{
            str2[j--]=str1[i];
        }
        i--;
    }
    cout<<str2<<endl;

    return 0;
}

        代码还有优化的空间,例如能不能直接使用一个字符串完成替换。大家可以自己想一想。只需要略微修改上面的代码就可以实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值