题目要求:
给字符数组,要求删除其中的某个字符,并将某个字符替换。
假设将空格替换为%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; }
运行结果:
时间: 2024-10-12 13:31:33