关于替换字符串中的空格问题

题目:实现一个函数,要求吧字符串中的所有空格替换成“%20”。例如把“hello world"  变成  ”hello%20world"。

分析:我们可能会有三种方法:

(1).创建一个新的数组,让其遇到空格就变成“%20”,显然这种方法可以实现,但其也会浪费空间,所以这种方法也并不是很好。

(2).在原有的基础上进行替换,当然前提是数组空间是足够的,然后就要想是从前往后还是从后向前,如果是从前向后进行替换的换的话,那后面的字符肯定会被覆盖,所以只能从后向前进行替换,遇到空格就向后移动在进行替换。

(3)可以通过计算算出替换后数组的长度,即在原有的数组长度后面加上2*空格数,用下标标识出原数组和待插入的位置,然后从后向前处理,如果遇到空格直接替换成“%20”,如果没有的话就直接将前面的数搬到后面,直到原数组和待插入的下标重合。

相比之下(3)比(2)所需的时间更短,效率更高,因此我们应采用第三种方法

具体代码如下:

#include<stdio.h>

#include<assert.h>

#include<string.h>

#include<stdlib.h>

void change(char *p)

{

assert(p);

int newlen = 0;

int len = 0;

int count = 0;

int end = 0;

int newend = 0;

int i = 0;

len = strlen(p);

for (i = 0; i<=len; i++)

{

if (p[i] == ‘ ‘)

count++;

}

newlen = len + count * 2;

end = len;

newend = newlen;

while (end != newend)

{

if (p[end] == ‘ ‘)

{

p[newend--] = ‘0‘;

p[newend--] = ‘2‘;

p[newend--] = ‘%‘;

end--;

}

else

p[newend--] = p[end--];

}

}

int main()

{

char *a = (char*)malloc(sizeof(char)* 100);

assert(a);

gets_s(a,100);

change(a);

printf("%s\n",a);

free(a);

system("pause");

return 0;

}

运行结果:

时间: 2024-10-05 00:32:26

关于替换字符串中的空格问题的相关文章

替换字符串中的空格

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

C++用%20替换字符串中的空格(O(n)的时间效率)

#include <iostream> #include <malloc.h> #include <string.h> using namespace std; //将字符串中的空格用%20替换. void Grial(char *str) { if(str==NULL)return ; char *p = str; char *q = NULL; char buf[strlen(str)+1]; int count = 0;//计数空格数. while(*p!='\0

每日一题11:替换字符串中的空格

用指定的字符或字符串替换某个字符串中出现的所有空格,当用字符替换字符是,自然是很简单的,但是当使用字符串替换字符时,如果还是从前往后遍历,遇到指定字符就将其后所有字符往后移出足够空间的话,当字符串中的空格很多时,反复的移动字符会带来性能上的损失.但是如果是从后往前遍历呢?可以先遍历一次原字符串,得到字符串中空格的个数,然后就可以计算出实际需要的空间,再假设原字符串所在缓冲区有足够空间(否则新建一个缓冲区从前往后遍历就行了,这里说的是在不新建缓冲区的情况下做这件事),那么就可以计算出每个字符最后的

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

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

替换字符串中的空格(C++/Java实现)

题意描述:实现一个函数把字符串中的每个空格替换成"20%".例如: 输入:"we are happy" 输出:"we%20are%20happy" 解题思路:(C++实现方法)如果从前往后遍历,遇到空格再将字符向后移动,则假设有O(n)个空格的时间效率就是O(n^2).因此优化的解法就是一次移到位,先遍历一次字符串,可同时得到字符串的长度和字符串中空格的数量,然后对于1个空格用"%20"这3个字符替换,所以可以计算出最终字符串

经典算法题-基础-替换字符串中的空格

目录 问题描述 解题思路 相关代码 问题描述 题目描述 请实现一个函数,把字符串中的每个空格替换成"%20" 要求 时间限制:1秒 空间限制:32768K 方法原型 public void replaceSpace(char[] str) 输入输出例子 输入:"Wa are happy" 输出:"We%20are%20happy" 解题思路 此题最自然的思路,就是从字符串的开始遍历,寻找空格,当遇到空格时,就将空格替换为"%20&quo

剑指offer 替换字符串中的空格

void replaceSpace(char *str,int length) { if(str==NULL||length<=0) return; int originlen=0; int newlen=0; int space=0; while(str[originlen]!='\0') { if(str[originlen]==' ') space++; originlen++; } originlen++; newlen=originlen+2*space; if(originlen==

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

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

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

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