《剑指offer》替换空格

题目描述:

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

Solution:

#include <iostream>

using namespace std;

void replaceBlank(char str[],int length)
{
  if(str==NULL||length<0) return ;

  int originalLength=0;
  int numberOfBlank=0;
  int i=0;
  while(str[i]!=‘\0‘)
  {
    originalLength++;
    if(str[i]==‘ ‘)
            ++numberOfBlank;
    ++i;
  }

  int newLength=originalLength+numberOfBlank*2;
  if(newLength>length)
    return;

  int indexOfOrignal=originalLength;
  int indexOfNew = newLength;

  while(indexOfOrignal>=0&&indexOfNew>indexOfOrignal)
  {
    if(str[indexOfOrignal]==‘ ‘)
    {
        str[indexOfNew--]=‘0‘;
        str[indexOfNew--]=‘2‘;
        str[indexOfNew--]=‘%‘;
    }
    else{
        str[indexOfNew--]=str[indexOfOrignal];
    }
    --indexOfOrignal;
  }

}
int main()
{
    char str[30]="we are happy!";
    replaceBlank(str,30);
    cout<<str<<endl;
    return  0;
}
时间: 2024-10-11 07:05:19

《剑指offer》替换空格的相关文章

【剑指offer】第四题 替换空格

/** * 剑指offer 第4题 替换空格 * 特点:1.先扫描串中的空格数,计算好替换后的长度 * 2.使用双指针,从后面开始向前替换,避免从前开始每次替换后就要移动后面的所有的数据 * 测试用例:特殊:有多个空格 * 错误:数组长度不够,字符串为空 * */ package javaTrain; public class Offer4 { public static void main(String[] args) { String a = "Hello I am Daisy Dong!&

替换空格 4

先遍历每个字符统计空格数 :String.charAt() ? ? 根据空格数计算新的长度 :newLength=oriLength+2*NumOfBlank ? ? 新建一个newLength长度的字符数组tempChars用于存放替换空格之后的字符数组 ? ? 利用System.arraycopy函数将原字符串转换为数组拷贝到新的字符数组tempChars中 ? ? 从新字符数组末尾开始遍历,用一个index1指向新字符数组末尾,用一个index2指向原字符数组末尾所在新字符数组的位置,将原

Pro4 替换空格(java)

注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 1 /* 2 * 剑指offer 替换空格 3 * xsf 4 * */ 5 6 /*开始替换空格的函数,length为原数组的长度,java中length不计算/0*/ 7 class BlankFun{ 8 public String replaceBank(String str) { 9 if(str==null)//输入安全判断 10 return null; 11 //构建一个新的Str

Pro4 替换空格

本题最大的困难是如何在不新建新的数组下完成空格替换,主要考察数组指针的运用 思路:(1)找出字符串空格的长度,从而确定新的子串尾指针的位置所在: (2)通过遍历找出空格,string[indexOfNew--]依次附上%20三个字符,indexOfOriginal-- 注:并没有通过实际指针而是通过字符串下标操作,起始时均指向末尾位置 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 /

java实现——004替换空格

1.创建新的字符串 1 public class T004 { 2 public static void main(String[] args){ 3 System.out.println(replaceBlank("we are happy")); 4 } 5 public static String replaceBlank(String s){ 6 String r = "%20"; 7 String result = ""; 8 for(

【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; //原

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

// 字符串替换空格:请实现一个函数,把字符串中的每个空格替换成"%20". // 例如输入"we are happy.",则输出"we%20are%20happy." #include <stdio.h> #include <assert.h> char* replace(char* p) { char* ret = p; int num = 0; int oldlen = 0; int newlen = 0; char

剑指Offers 题目1510:替换空格

题目1510:替换空格 题解报告:  水题,注意数据,我是用最简单的办法,一扫而替换,判断的时候注意,s[i]!=0,全局数组初始化默认为0,我开始用了strlen(s)判断,超了不少时,哎呀! #include <stdio.h> #include <stdlib.h> #include <string.h> char s[10000001]; int main() { while(gets(s)){ for(int i=0; s[i]!=0; i++){ if(s[

替换空格--《剑指offer》

如题所示,题目很简单,替换空格,将字符串中的空格替换为%20: 即"we are happy"替换成"we%20are%20happy": 如果每当我们遇到一个空格就将字符串向后平移两位,这样复杂度就是O(n2)了,这样的方法是不可取的,按照作者的来说,offer已不足拿到了: 而当我们反向从字符串末尾开始遍历,复杂度仅为O(n),当然前提的是该字符串有足够空间,否则替换会失败. 了解到思想之后程序也就比较简单了,发现自己的与作者的写的也比较类似,就此贴上了...

替换空格-剑指Offer

替换空格 题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路 遍历一遍,统计空格数量,扩大相应容量 两个指针,一个指向旧的长度,一个新的长度,从后往前走,一个一个走,遇到空格,right走3个,left走1个 left == right或left == 0就不用接着走了 代码 public class Solution02 { public String replaceSpac