• (字符串)字符串的删除、复制、替换


    题目要求:

    给字符数组,要求删除其中的某个字符,并将某个字符替换。

    假设将空格替换为%20,并且原数组大小足够大,只能在原数组操作。

    解题思路:

    删除操作:遍历数组,如果不是删除的字符,则依次写入数组,遇到要删除的字符,则跳过;

    复制/替换操作:复制是指将数组中某个字符复制n次,如b变成bb;是指将字符替换成其他字符或字符串。这种操作的一个思路就是:在遍历数组的过程中,记录要被复制或者替换的字符的个数,然后计算复制或者替换后字符数组的大小,接着从后往前依次将原数组的字符写入,这样就无需进行移位,也不会覆盖原数组。

    参考代码:

    #include <iostream>
    
    using namespace std;
    
    // delete some char, and replace blanket with %20
    void stringDeleteAndReplace(char a[],char del){
    //    int n=sizeof(a)/sizeof(a[0]);
        int len=0;
        int num_rep=0;
        // delete some char and record the num of ' '
        for(int i=0;a[i];i++){
            if(a[i]==' ') num_rep++;
            if(a[i]!=del) a[len++]=a[i];
        }
        a[len]='';
    
        // newlength after deletion and replacement
        int newlength=len+1+2*num_rep;
        int j=newlength-1;
        // from last to first
        for(int i=len;i>=0;i--){
            if(a[i]!=' ') a[j--]=a[i];
            else{
                a[j--]='0';
                a[j--]='2';
                a[j--]='%';
            }
        }
    }
    
    int main()
    {
        char a[100]="This is my name: AndyJee";
        stringDeleteAndReplace(a,'s');
        cout<<a<<endl;
        return 0;
    }

    运行结果:

    tmp

  • 相关阅读:
    java.lang.IllegalStateException: Failed to load ApplicationContext
    exit 和 return
    ORA-01031:insufficient privileges
    Errors running buider 'DeploymentBuilder' on project 'HFMS'
    unpack
    :Spring MVC +MyBatis +MySQL 登录查询Demo
    :Spring MVC +MyBatis +MySQL 登录查询Demo
    kill 某个进程
    10053 诊断事件
    11g 搜集直方图导致不走索引
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4467585.html
Copyright © 2020-2023  润新知