将字符串中的空格变成%20如“we are happy ”变成“we%20are%20happy”

分析:

将字符串中的空格替换成三个字符‘%‘,‘2‘,‘0‘;

一、创建另一个数组就太简单了,将字符串str的内容复制到新的数组中,当遇到‘ ’时就将输出%20;如果没有空格就将原字符串中的字符复制过来就好了;

二、计算出字符串中的空格数,然后将代替后的字符串长度算出来,因为代替时会将原字符串中的字符覆盖掉,因此我们应该遍历时遇到空格就将它后面的字符向后移两位,这样就可以将%20放进去,但是由于每次遇到空格都向后移一次,那么就没有效率,因此我们可以将最后一个字符一次移到最后。

步骤是这样的:

算出来字符串有13个字符(‘\0‘),加上要代替的空格的空间,一共13+2*2=17个,那么我们可以将原来的长度赋值给oldlen=13,新长度赋值给newlen=17;

先将字符串的最后一个字符移到最后一个空间里,即‘\0’移到newlen的位置;

然后将‘y’移到倒数第二个位置,依次移动,当遇到 ‘ ’时先将‘0‘放进空格应该移到的位置,然后将‘2‘‘%‘依次放入,之后继续将空格前面的一个字符移到‘%‘前面的位置;依次移动直到移动完为止;

代码如下:

#include<stdio.h>
#include<assert.h>
#include<string.h>
void replace_black(char *str)
{
    char *pstr=str;
    int oldlen=strlen(str);
    int newlen=0;
    int count=0;
    while(*pstr)
      {
        if(*pstr==‘ ‘)
           count ++;
        pstr++;
      } 
    newlen=oldlen+2*count;
  while(oldlen < newlen)
  {
    if(str[oldlen]==‘ ‘)
      {
           str[newlen--] = ‘0‘;
           str[newlen--] = ‘2‘;
           str[newlen--] = ‘%‘;

oldlen--;
      }
     else
       str[newlen--]=str[oldlen--];

}
}
int main()
{
  char str[20]="we are happy";
  replace_black(str);
  printf("%s",str);
  return 0;
}
                                                              37,1          Bot

时间: 2024-12-17 15:40:17

将字符串中的空格变成%20如“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

《剑指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

替换字符串中的空格

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

将字符串中的空格用 代替

/*测试数据:Shen zhen is a beautiful city!*/ /*运行结果:Shen%20zhen%20is%20a%20beautiful%20city!*/ #include<stdio.h> #define SIZE 1000 void wordReplace(char *str) { char *p = str, *e=str,*q,*r; char rp[] = "%20"; r = rp; while (*e != 0){ ++e; } q=e

用较小的代价去除字符串中的空格

题目: 用C语言写一个函数,去除字符串中的空格,并返回删除的空格的个数.不允许开辟新的空间,只能申请简单类型的自动变量.时间复杂度要求为O(n). 比如:char str[]="dhkak   df d fd     fdjfkda     dfd   ff f  fd da "; 处理之后: str[]="dhkakdfdfdfdjfkdadfdffffdda"; 返回删除空格的个数为:12算法思想: 先取字符串的长度,然后用前后各一个指针,分别为p,q,使前面一

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

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

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

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

字符串中的空格替换

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