将字符串中的空格替换为%20

------------------------------------------------------------------------------------------------------

例如:有字符串we are family,实现后的字符串为we%20are%20family。

如果从前向后,遇空格替换空格,那么family必将向后移动两次;那么我们可以从后向前实现,

先预留足够的空间,先移动family,再移动are,遇空格填充即可。

------------------------------------------------------------------------------------------------------

C语言代码:

# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <assert.h>

# define MAX 50

void insert(char *p)
{
     assert(p);
     char *pstart = NULL;
     char *pend = NULL;
     int black = 0;
     int size = strlen(p);
     
     pstart = p + size;
 
     while (*p)                         //统计预留空格数
     {
          if (*p == ‘ ‘)
          {
               black++;
           }
          p++;
     }
    
     pend = pstart + (black * 2);
    
     while (pstart < pend)
     {
          if (*pstart != ‘ ‘)
          {
               *pend = *pstart;
               pstart--;
               pend--;
          }
          else
          {
               *pend-- = ‘0‘;
               *pend-- = ‘2‘;
               *pend-- = ‘%‘;
               *pstart--;
          }
     }
}
int main()
{
     char str[MAX] = "";
     
     printf("请输入字符串:");
     gets(str);
     
     insert(str);
     printf("%s\n",str);
     
     system("pause");
     return 0;
}

------------------------------------------------------------------------------------------------------

干活小知识:循环语句,应当将最长的循环放在最内层,最短的放在最外层,以减少CPU跨切循环层数,建议for循环的循环控制变量采取“半开半闭”的写法。

------------------------------------------------------------------------------------------------------

时间: 2024-12-28 17:50:22

将字符串中的空格替换为%20的相关文章

《剑指Offer》替换空格(将字符串中的空格替换为%20)

题目: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy. 思路: 这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换. 看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节.这种解法的时间复杂度为O(n^2)!!! 另外一种较好的解法是从后往前替换,具体做法是从头遍历计算所有空格数,计算出总的长度. 该解

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

请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 注意从后向前替换,使得时间复杂度为O(n); public class Main { public static void main(String[] args) { Main main01=new Main(); String str=main01.replaceSpace(new StringBuffer("old s

剑指offer 66题 -- 将一个字符串中的空格替换成“%20”

class Solution {public: void replaceSpace(char *str,int length) { //变量定义区 int newtv = 0; int oldtv = 0; int spaceNum = 0; //入参有效性判断 if( NULL == str || length <= 0) return; //计算空格数目 int i =0; while(str[i] != '\0') { oldtv++; if(str[i] == ' ') spaceNum

字符串中的空格替换

题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 首先,还是想到简单.原始的方法,从头到尾扫描字符串,遇到每遇到一次空 格,先将空格之后的所有元素移动两个字节,然后将空格替换成"%20".显然这种方法需要大量移动字符.假设字符串的长度是n,每遇到一个空格,需要移动O(n)个字符,因此对含有O(n)个空格的字符串而言,时间复杂度为O(n^2).

【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”

//字符串替换空格:实现一个函数,把字符串里的空格替换成"%20" #include <stdio.h> #include <assert.h> void replace(char *src) { assert(src); int OldLen = 0; //原字符串长度 int NewLen = 0; //新字符串长度 int BlackNum = 0; //空格数量 int NewBack = 0; //新字符串尾部 int OldBack = 0; //原

将一个字符串中的空格替换为指定的内容——4

实现一个函数,将一个字符串中的所有空格替换为"%20",例如输入字符串"How beautiful you are!",输出结果应为"How%20beautiful%20you%20are!". 首先,如果另开辟一块空间并且足够将全部空格都替换成"%20",然后一个单词一个单词的拷贝过去,当遇到空格时就放进去"%20",这种低效率的方法肯定是可行的,但很显然不仅效率不高还浪费存储空间,因此,要节省空间就要在

字符串中的空格替换问题(Java版)

解决方式一:时间复杂度为O(n^2) 解决方式二:时间复杂度为O(n) 代码实现: package string; public class SpaceStringReplace2 { //len为数组大小的总容量 public static void SpaceReplace(String strOld,int len){ char[] chs =new char[len]; char[] ch = strOld.toCharArray(); for (int i = 0; i < ch.le

替换字符串中的空格

题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个输入文件仅包含一组测试样例. 对于每组测试案例,输入一行代表要处理的字符串. 输出: 对应每个测试案例,出经过处理后的字符串. 样例输入: We Are Happy 样例输出: We%20Are%20Happy -------------------------------------------------

(CSDN迁移)替换字符串中的空格

题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. public class Solution { public String replaceSpace(StringBuffer str) { String string = str.toString(); return string.replaceAll(" ", "%20"); }