代码随想录-04-字符串-03.替换数字

替换数字

题目

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。

例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

对于输入字符串 "a5b",函数应该将其转换为 "anumberb"

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

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

样例输入:a1b2c3

具体思路

  • 输入时计算数组中存在的数字数量,str[i] > "0" && str[i] < "9" 进行判断;
  • 记录输入的数量size,记录需要扩容的数量resize;
  • 从后往前 就不用移动原来中的元素(因为目的是O(1)的空间复杂度) 进行扩容;
  • 每查找到一个数字进行替换,否则正常复制。

具体代码

CPP
C++ 复制代码
#include <iostream>
using namespace std;

int main() {
    string s;
    cin >> s;
    int count = 0;

    // 统计数字字符的个数
    for (int  i = 0; i < s.size(); i++) {  
        if (s[i] >= '0' && s[i] <= '9') {  
            count++;
        }
    }

    int original_size = s.size(); // 保存原始字符串大小
    s.resize(original_size + count * 5); // 扩展字符串以容纳 "number"

    int k = s.size() - 1;  // 新字符串末尾的位置
    for (int j = original_size - 1; j >= 0; j--) {
        if (s[j] >= '0' && s[j] <= '9') {  // 判断是否为数字
            s[k] = 'r';
            s[k - 1] = 'e';
            s[k - 2] = 'b';
            s[k - 3] = 'm';
            s[k - 4] = 'u';
            s[k - 5] = 'n';  // 插入 "number"
            k -= 6;  // 减去 "number" 的长度
        } else {
            s[k] = s[j];  // 复制非数字字符
            k--;
        }
    }

    // 输出修改后的字符串
    cout << s << endl;

    return 0; 
}
Java直接版本
java 复制代码
import java.util.Scanner;

public class Main {

    public static void main(String[] s) {
        Scanner sc = new Scanner(System.in);
        String cur = sc.nextLine();
        StringBuilder sb = new StringBuilder();
        int count = 0;
        for (int i = 0; i < cur.length(); i++) {
            if (cur.charAt(i) - '0' >= 0 && cur.charAt(i) - '0' <= 9) {
                sb.append("number");
            } else {
                sb.append(cur.charAt(i));
            }
        }
        System.out.println(sb.toString());

    }
}
相关推荐
张张努力变强1 小时前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
wWYy.1 小时前
数组快排 链表归并
数据结构·链表
李斯啦果2 小时前
【PTA】L1-019 谁先倒
数据结构·算法
Mr Xu_17 小时前
告别硬编码:前端项目中配置驱动的实战优化指南
前端·javascript·数据结构
czxyvX17 小时前
017-AVL树(C++实现)
开发语言·数据结构·c++
数智工坊18 小时前
【数据结构-队列】3.2 队列的顺序-链式实现-双端队列
数据结构
elseif12318 小时前
【C++】并查集&家谱树
开发语言·数据结构·c++·算法·图论
徐小夕@趣谈前端18 小时前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
Nebula_g19 小时前
线程进阶: 无人机自动防空平台开发教程(更新)
java·开发语言·数据结构·学习·算法·无人机
xuxie9920 小时前
day 23 树
数据结构