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‘)
    {
        if(*p==‘ ‘)
            count ++;
        p++;
    }
    strcpy(buf,str);
    int n = strlen(str)+2*count+1;
    str = (char *)malloc(n);
    memset(str,‘\0‘,sizeof(str));
    strcpy(str,buf);

    p  = str+n-1;//n是字符串包括‘\0‘的长度,我想让p指向对后一个‘\0‘位置,我让str+n指向的是‘\0‘后面的位置,
                             //所以p=str+n-1才是指向对后一个位置‘\0‘,为什么我要写一遍这个,我纠结了半天怎么错位了,奶奶的,
                            //30分钟没有了,以后长记性。
  q  = p-count*2;
    while(1)
    {
        if(*q == ‘ ‘)
        {
            *p=‘0‘;
            p--;
            *p=‘2‘;
            p--;
            *p=‘%‘;
        }
        else
            {
                *p = *q;
            }
        if(p==q)break;
        q--;
        p--;
    }
    cout<<str<<endl;
}

int main()
{
    char a[]="you are a good boy!!!";
    Grial(a);
    return 0;
}

/*---------------------------------------------------------------------------------------*/
#include <iostream>
//求递增二维数组中的一个值。
//我一个同学在2面笔试中遇到这个题了。
using namespace std;
int Grial(int (*a)[6],int x,int y,int val)
{
    int i = y-1;
    int j = 0;
    while(i!=0 && j!=x)
    {
        if(a[j][i]>val)
        {
            i--;
        }
        else if(a[j][i]<val)
        {
            j++;
        }
        else
        {
            return a[j][i];
        }
    }
    return false;
}

int main()
{
    int a[][6]={1,3,4,6,7,9,
                     2,4,5,7,9,10,
                     4,5,7,8,10,13,
                        };
    cout<<Grial(a,3,6,3)<<endl;
}
时间: 2024-10-05 19:37:12

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

替换字符串中的空格

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

每日一题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"); }

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

题目:实现一个函数,要求吧字符串中的所有空格替换成"%20".例如把"hello world"  变成  "hello%20world". 分析:我们可能会有三种方法: (1).创建一个新的数组,让其遇到空格就变成"%20",显然这种方法可以实现,但其也会浪费空间,所以这种方法也并不是很好. (2).在原有的基础上进行替换,当然前提是数组空间是足够的,然后就要想是从前往后还是从后向前,如果是从前向后进行替换的换的话,那后面的字

替换字符串中的空格(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==

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