替换空格

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

解题思路:
1、题解可以直接按照默认申请了很大空间,允许直接插入空间的操作,

解法一;



class Solution {

public:

void replaceSpace(char *str,int length) {

// 计算空格的个数

int space_num = 0;

for(int i = 0; i < length; ++i)

{

if(str[i] == ' ')

space_num++;

}

// 从后往前,依次挪动字符,遇到空格替换为%20

for(int i = length-1; i >= 0; --i)

{

if(str[i] == ' ')

{

space_num--;

str[i+space_num*2] = '%';

str[i+space_num*2+1] = '2';

str[i+space_num*2+2] = '0';

}

else

{

str[i + space_num*2] = str[i];

}

}

}

};

虽然能通过但是总感觉不太舒服,因为在题目中毕竟没有说空间足够;
题解二(只是为了让强迫症的自己舒服):
1、在函数中申请一个空间大小为:原大小+空格数*2
2、两个指向,一个指向原数组长度末尾一个指向新数组长度末尾,
3、依次递减,如果不为空格则将原数组内容赋给新数组,如果为空格则将%20填入新数组;
代码:

char* haha(char* str, int len) {
 int count = 0;
 for (int i = 0; i < len; i++) {
  if (str[i] == ' ') {
   count++;
  }
 }
 char* arr = (char*)malloc(len + count * 2);
 memcpy(arr, str, len);
 int a = len - 1;
 int b = len + count * 2 - 1;
 for (int i = a; i>0; i--,b--) {
  if (arr[i] != ' ') {
   arr[b] = arr[i];
  }
  else {
   arr[b] = '0';
   b--;
   arr[b] = '2';
   b--;
   arr[b] = '%';
  }
 }
 str = arr;
 return str;
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值