卡码 54.替换数字

卡码 54:替换数字算法
#include<iostream>
#include<string>
using namespace std;

int main(){
    string s;
    while(cin>>s){
        int len=s.size();
        int count=0;
        for(int i=0;i<len;i++){
            if(s[i]>='0'&&s[i]<='9'){
                count++;
            }
    
    
    
        }
        s.resize(len+5*count);
        int newIndex=s.size()-1;
        int oldIndex=len-1;
        while(oldIndex>=0){
            if(s[oldIndex]>='a'&&s[oldIndex]<='z'){
                s[newIndex--]=s[oldIndex];
            }else{
                s[newIndex--]='r';
                s[newIndex--]='e';
                s[newIndex--]='b';
                s[newIndex--]='m';
                s[newIndex--]='u';
                s[newIndex--]='n';
    
            }
            oldIndex--;
        }
        cout<<s<<endl;
    

    }


    return 0;
}

### C语言替换字符串中数字的方法 在C语言中,可以使用循环遍历整个字符串并逐个检查每个字符是否为数字。如果是,则将其替换为目标字符或字符串。 对于简单的情况,即仅将单个字符替换成另一个字符(如将所有的数字字符替换成`'$'`),可以直接修改原字符串的内容: ```c #include <stdio.h> #include <string.h> int main() { char a[20]; fgets(a, sizeof(a), stdin); size_t k = strlen(a); for (size_t i = 0; i < k; ++i) { if ('0' <= a[i] && a[i] <= '9') { // 判断当前字符是否为数字 a[i] = '$'; // 如果是则替换为$ } } fputs(a, stdout); // 输出处理后的字符串 } ``` 上述代实现了基本功能[^1]。然而,在某些情况下可能需要保留原始字符串不变或者执行更复杂的替换操作(比如用多位数代替原来的数字)。这时就需要创建一个新的目标缓冲区来存储结果,并且考虑到新旧字符串长度差异可能导致的空间需求变化问题。 为了应对这种情况,下面提供了一个更加通用的例子,该例子不仅能够处理简单的字符替换,还可以支持将每一个匹配到的子串映射成不同的替代物: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> char* replace_substrings(const char *source, const char *target, const char *replacement) { int target_len = strlen(target); int repl_len = strlen(replacement); // 计算最终所需空间大小 int new_length = 0; const char *p = source; while ((p = strstr(p, target)) != NULL){ p += target_len; new_length += p - source + repl_len; source = p; } new_length += strlen(source)+1; char *result = malloc(new_length*sizeof(char)); if (!result) return NULL; result[0]='\0'; p=source; while((p=strstr(source,target))){ strncat(result,source,p-source); strcat(result,replacement); source=p+strlen(target); } strcat(result,source); return result; } // 测试函数 void test_replace_digits_with_string(){ char input[]="abc1defg2hij"; char pattern[]="[0-9]"; char replacement[]="%"; char *output = replace_substrings(input,"[0-9]",replacement); printf("Original string: %s\nModified string: %s\n",input,output?output:"(null)"); free(output); } int main(){ test_replace_digits_with_string(); return 0; } ``` 此版本通过`replace_substrings()`函数接收三个参数——源字符串、待寻找的目标模式以及用来取代它的字符串。这里假设`pattern`总是表示单个字符的位置,因此实际应用时还需要进一步调整逻辑以适应不同场景下的具体要求[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值