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

题目要求:

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

假设将空格替换为%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]='\0';

    // 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

posted @ 2015-04-29 22:17  AndyJee  阅读(999)  评论(0编辑  收藏  举报