Bootstrap

替换数字-卡玛

第一次使用卡玛网来做题,和力扣不同之处在于,头文件的引用和函数定义都没有给,全都需要自己来写,同时输入输出也需要自己来写,刚接触还是不太熟练。
第一种解法是使用内置函数replace,当匹配的字符在 ’0‘ 到 ’9‘的范围时,使用“number”将其替换。代码如下:

#include <iostream>
#include <string>

void replaceDigitsWithNumber(std::string &s) {
    for (int i = 0; i < s.size(); ++i) {
        if (s[i]>='0' && s[i] <='9') {
            s.replace(i, 1, "number");
            i += 5;    
            
        }
    }
}

int main() {
    std::string input;
    std::cin >> input;
    replaceDigitsWithNumber(input);
    std::cout << input << std::endl;
    return 0;
}

第二种写法是使用双指针法来完成,首先遍历一遍字符串,统计字符 0 到 9 的数目,然后将字符串空间进行扩展,之后从后向前检测并进行插入。

  • 从后向前插入的好处是,不用在每次插入后,都将后续的元素都往后进行移动。
#include<bits/stdc++.h>
using namespace std;
 
int main() {
    string s;
    while (cin >> s) {
        int sOldIndex = s.size() - 1;
        int count = 0;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] >= '0' && s[i] <= '9') {
                count++;
            }
        }
 
        s.resize(s.size() + count * 5);
        int sNewIndex = s.size() - 1;
 
        while (sOldIndex >= 0) {
            if (s[sOldIndex] >= '0' && s[sOldIndex] <= '9') {
                s[sNewIndex--] = 'r';
                s[sNewIndex--] = 'e';
                s[sNewIndex--] = 'b';
                s[sNewIndex--] = 'm';
                s[sNewIndex--] = 'u';
                s[sNewIndex--] = 'n';
            } else {
                s[sNewIndex--] = s[sOldIndex];
            }
            sOldIndex--;
        }
        cout << s << endl;       
    }
}
;