字符串下划线替换-不开辟新的内存

本文详细介绍了如何在不开辟新内存的情况下,处理字符串中的特殊字符,并将其替换为特定格式。通过计算原始字符串长度和特殊字符数量,实现内存优化的字符串替换操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试题:处理一个字符串,把字符串中的'_'替换成'%A2',该字符串大空间足够大。要求不开辟新的内存。

比如str[23]="abc_de__h"

处理后:"abc%A2de%A2%A2h"

思路:先把字符串的长度求出来为len.再把'_'个数num求出来,新的数字占用内存为len+num*2.接下来就能够进行替换了。

代码如下:


#include <iostream>

#include <string>
using namespace std;


void rep(char *p){

int len = strlen(p);
int num=0,newLen,pos,end;
cout<<len;
//get the number of '_'
//"abc_de__h";
for(int i=0; i<9; i++){
if (p[i] == '_'){
num++;
}
}

//move *pos to the new end
newLen = strlen(p)+2*num;   //new memory
pos = len ;
end = newLen ;



//Move number from end to begin 
while(pos != end)
{


if ( p[pos] != '_')
{
p[end--] = p[pos--];

}
else{   //if *p == '_'   replace %A2 to '_'

p[end--] = '2';
p[end--] = 'A';
p[end--] = '%';
pos --;
}
}

}


int main(){
char strs[256] = "abc_de__h";
rep(strs);
cout<<"newstr:"<<strs;
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值