替换空格问题

简介: 替换空格问题

这是一个典型的双指针问题


一. 问题描述


请实现一个函数,将一个字符串中的每个空格替换成“%20”。


例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。


二. 思路分析


我们先来做一个简单的问题 假设这个字符串只有一个空格


03f5fb40308b4c16a82d548a3416c0ad.png


那么我们只需要从最后面开始分别输入


‘0’ ‘2’ ‘%’ 这三个字符就可以


我们可以发现 后来的字符串比原来的字符串长度长2


那么 如果是两个空格呢?


如果是三个空格呢?


我们通过研究可以发现 有多少个空格 那么后面一个字符串会比前面一个字符


多几个二


那么我们只要设立两个指针 一个指针指向改变后最后面的字符


一个指针指向改变前最后面的字符


让这两个指针分别 –


如果前面的一个指针遇到空格 那么后面的一个指针就往前移动并修改三个字符的内容


如果前面的一个指针遇到的不是空格 那么后面的一个指针就接受前面一个指针的内容


综上


三. 代码展示


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include<assert.h>
// 指针指向的是字符串的起始位置 
// 长度就是整个字符串的长度
void typechange(char* str, int length)
{
  int count = 0;
  int i = 0;
  char* tmp = str;
  for (i = 0; i < length; i++)
  {
    if (*str == ' ')
    {
      count++;
      str++;
    }
    str++;
  }
  int end1 = length - 1;
  int end2 = length + 2 * count - 1;
  while (end1!=end2)
  {
    if (tmp[end1] != ' ')
    {
      tmp[end2] = tmp[end1];
      end2--;
      end1--;
    }
    else
    {
      tmp[end2--] = '0';
      tmp[end2--] = '2';
      tmp[end2--] = '%';
      end1--;
    }
  }
}
int main()
{
  char arr[100] = "we are family";
  // 要求 将所有的空格变成%20
  typechange(arr, strlen(arr));
  puts(arr);
  return 0;
}


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏


希望大佬们看到错误之后能够不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯

相关文章
|
22天前
(剑指offer)05 替换空格-58 II.-左旋转字符串(2021-11-25)
(剑指offer)05 替换空格-58 II.-左旋转字符串(2021-11-25)
19 0
|
6月前
反转字符串
反转字符串
44 1
|
6月前
|
Java
每日一题《剑指offer》字符串篇之替换空格
每日一题《剑指offer》字符串篇之替换空格
54 0
每日一题《剑指offer》字符串篇之替换空格
|
12月前
替换空格
替换空格
|
Shell
【Leetcode -342. 4的幂 -344.反转字符串 -345.反转字符串中的元音字母】
【Leetcode -342. 4的幂 -344.反转字符串 -345.反转字符串中的元音字母】
42 0
剑指offer-4.替换空格
剑指offer-4.替换空格
34 0
|
存储 C++
剑指offer 04. 替换空格
剑指offer 04. 替换空格
68 0
|
算法 API
LeetCode:剑指Offer 05. 替换空格 (字符串)
题目描述:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
|
算法 Java C++
替换空格(剑指offer 05)
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
107 0
|
测试技术
10.替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
93 0