精华内容
下载资源
问答
  • 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."思路如果想把这道题目做到极致,就不要只用额外的辅助空间了!首先扩充数组到每个空格...
    0fe5789e938fc93b0c02c64191595510.gif给「代码随想录」一个星标吧!

    遇到对字符串或者数组做填充或删除的操作时,都要想想从后向前操作怎么样。

    题目:剑指Offer 05.替换空格

    请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

    示例 1:
    输入:s = "We are happy."
    输出:"We%20are%20happy."

    思路

    如果想把这道题目做到极致,就不要只用额外的辅助空间了!

    首先扩充数组到每个空格替换成"%20"之后的大小。

    然后从后向前替换空格,也就是双指针法,过程如下:

    i指向新长度的末尾,j指向旧长度的末尾。

    c04f1fbe803b5019bd043effb64e13f3.gif

    有同学问了,为什么要从后向前填充,从前向后填充不行么?

    从前向后填充就是O(n^2)的算法了,因为每次添加元素都要将添加元素之后的所有元素向后移动。

    「其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。」

    这么做有两个好处:

    1. 不用申请新数组。
    2. 从后向前填充元素,避免了从前先后填充元素要来的 每次添加元素都要将添加元素之后的所有元素向后移动。

    C++代码

    class Solution {
    public:
        string replaceSpace(string s) {
            int count = 0; // 统计空格的个数
            int sOldSize = s.size();
            for (int i = 0; i             if (s[i] == ' ') {
                    count++;
                }
            }
            // 扩充字符串s的大小,也就是每个空格替换成"%20"之后的大小
            s.resize(s.size() + count * 2);
            int sNewSize = s.size();
            // 从后先前将空格替换为"%20"
            for (int i = sNewSize - 1, j = sOldSize - 1; j             if (s[j] != ' ') {
                    s[i] = s[j];
                } else {
                    s[i] = '0';
                    s[i - 1] = '2';
                    s[i - 2] = '%';
                    i -= 2;
                }
            }
            return s;
        }
    };

    时间复杂度:O(n)
    空间复杂度:O(1)

    此时算上本题,我们已经做了七道双指针相关的题目了分别是:

    • 27.移除元素
    • 15.三数之和
    • 18.四数之和
    • 206.翻转链表
    • 142.环形链表II
    • 344.反转字符串

    拓展

    这里也给大家拓展一下字符串和数组有什么差别,

    字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。

    在C语言中,把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。

    例如这段代码:

    char a[5] = "asd";
    for (int i = 0; a[i] != '\0'; i++) {
    }

    在C++中,提供一个string类,string类会提供 size接口,可以用来判断string类字符串是否结束,就不用'\0'来判断是否结束。

    例如这段代码:

    string a = "asd";
    for (int i = 0; i }

    那么vector< char > 和 string 又有什么区别呢?

    其实在基本操作上没有区别,但是 string提供更多的字符串处理的相关接口,例如string 重载了+,而vector却没有。

    所以想处理字符串,我们还是会定义一个string类型。

    在留言区留下你的思路吧!

    -------end-------

    我将算法学习相关的资料已经整理到了Github :https://github.com/youngyangyang04/leetcode-master,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图看一看一定会有所收获!

    另外因为公众号改版,时间线被打乱,一些精彩文章大家可能错过了。如果感觉这里的文章对你有帮助,赶紧给「代码随想录」加一个星标吧,方便第一时间阅读文章往期精彩回顾字符串:简单的反转还不够!字符串:这道题目,使用库函数一行代码搞定数组:总结篇数组:这个循环可以转懵很多人!数组:滑动窗口拯救了你「代码随想录」期待你的关注!

    每天8:35准时推送一道经典算法题目,推送的每道题目都不是孤立的,而是由浅入深,环环相扣,帮你梳理算法知识脉络,轻松学算法!

    4c76ab016000e2c68babf7d75a418954.png4340adf1e4938f3a51a86459ef788408.png刷题可以加我微信!右边为个人微信,添加时备注:组队刷题我就知道你[在看]4a52b86a2b705dfc08dd89c1aba5ad17.gif
    展开全文
  • String.prototype.replace(searchValue, replacement)指定字符串及所需替换为某一字符串,最后返回一个被替换过的字符串。那么,接下来看看关于replaceAll()方法。String.prototype.replaceAll 替换字符串新方法​...

    a1c8f210473006750adc19ffff74b0cc.png
    通常我们使用JavaScript处理字符串的时候会使用replace方法。String.prototype.replace(searchValue, replacement)指定字符串及所需替换为某一字符串,最后返回一个被替换过的字符串。那么,接下来看看关于replaceAll()方法。
    String.prototype.replaceAll 替换字符串新方法www.deathghost.cn
    ef169e1f1fb5ca1f8609a4e1ac1373b9.png

    原始方法

    使用replace()方法后,我们常见的一个问题就是replace()不能替换所有指定的字符串。因为它仅替换第一次出现的子字符串。

    'abbc'.replace('b', '_');
    // 输出则是: "a_bc"
    
    '       '.replace(' ', ' ')
    // 输出:       

    我们可以看到仅替换了第一个字符串。那么,对于开发人员通常会使用带有global(g)标志的正则表达式进行处理。

    '       '.replace(/ /g, ' ')
    // 输出:"       "

    对于前端开发人员而言,这是一种方法,但若复杂一点,很容出错,也比较麻烦。

    另外一种方法就是使用stringObject.split(separator,howmany)结合arrayObject.join(separator)方法处理。

    // 如:将中间的加号“+”替换为空。
    's=a+b+c'.split('+').join(' ');
    // 则输出:"s=a b c"
    '       '.split(' ').join(' ')
    "       "

    看上去也还不错,但总感觉别扭,拆分后又合并连接起来。

    59420700bc098698bb0fa1c27df8d525.png

    接下来,我们了解下新方法。

    String.prototype.replaceAll 新方法

    新方法replaceAll()可以解决上面所述问题,字面意思我们也可以理解,并提供了一种简单的机制来执行全局子字符串替换。

    '       '.replaceAll(' ', ' ')
    // 输出:"       "
    's=a+b+c'.replaceAll('+', ' ');
    // => "s=a b c"

    为了与现有API保持一致,其String.prototype.replaceAll(searchValue, replacement)处理方式与String.prototype.replace(searchValue, replacement)完全相同。

    因此,String.prototype.replaceAll通过提供对全局字符串替换,而无需使用正则表达式或其他解决方法。

    特殊替换方式

    // 第一种
    'abcde'.replaceAll('c', '$$')
    // 第二种
    'abcde'.replaceAll('c', '$&')

    结果是:

    // 第一种输出结果
    "ab$de" 而非 "ab$$de"
    // 第二种输出结果
    "abcde" 而非 "ab$&de"

    浏览器String.prototype.replaceAll支持情况

    现代浏览器最新版均可支持,具体查看这里。

    展开全文
  • 这个例子把string字符串中的 " 替换成" 原作者Michael Mrozek ,在stackoverflow找到的https://stackoverflow.com/questions/3418231/replace-part-of-a-string-with-another-string #include <iostream> ...

    这个例子把string字符串中的 " 替换成"
    原作者Michael Mrozek ,在stackoverflow找到的https://stackoverflow.com/questions/3418231/replace-part-of-a-string-with-another-string

    #include <iostream>
    using namespace std;
    #include <string>
    #include<string.h>
    #include "json.hpp"
    
    void replaceAll(std::string& str, const std::string& from, const std::string& to) {
        if(from.empty())
            return;
        size_t start_pos = 0;
        while((start_pos = str.find(from, start_pos)) != std::string::npos) {
            str.replace(start_pos, from.length(), to);
            start_pos += to.length(); // In case 'to' contains 'from', like replacing 'x' with 'yx'
        }
    }
    
    bool replace(std::string& str, const std::string& from, const std::string& to) {
        size_t start_pos = str.find(from);
        if(start_pos == std::string::npos)
            return false;
        str.replace(start_pos, from.length(), to);
        return true;
    }
    
    
    
    int main(){
        std::string string(R"({"to_groupid":"ui","type":
        "TEXT","data":{"type":"alarm","workmode":"mode_gr"},"total":1,"current":0,"pc":"0.997997"})");
        replaceAll(string, "\"", "\\\"");
        cout << string << endl;
    
        return 0;
    }
    
    
    展开全文
  • 但如果我问您replace函数,您肯定用过,这是批量替换字符串的常用函数。常见数据库支持的字符串处理函数我先不卖关子了,下面把所有最新版本SQLServer支持的字符串函数都列出来,其中画红框的两个就是今天我要讲的,...

    常用SQL的朋友应该知道,SQL中一般都会提供一些字符串处理函数。如果要您把所有的字符串处理函数都摆出来,估计您心里就没底了。但如果我问您replace函数,您肯定用过,这是批量替换字符串的常用函数。

    常见数据库支持的字符串处理函数

    我先不卖关子了,下面把所有最新版本SQLServer支持的字符串函数都列出来,其中画红框的两个就是今天我要讲的,您看看先有个底。

    6303ad9665bbbcb8190372c31b4ca96a.png

    SQLServer的字符串函数跟MySQL、PostgreSQL比起来,确实是太少了。

    下图是MySQL支持的常用字符串函数,当然也有replace函数,用法与SQLServer大同小异,您可以参考一下:

    2bea3835d6b70977c3c1f7597b048aaf.png

    下图是PostgreSQL支持的常用字符串处理函数,当然也有replace函数,用法与SQLServer和MySQL也是大同小异,一并贴出来供您参考下:

    4572ae44434422095b52ed1cdffaecd5.png

    通过上面三图对比我们大概可以看出,不同数据库系统支持的字符串处理函数都差不多吧,比如都支持trim、replace、left、right、substring等等,还有一些可能名称不同,内涵和用法却都很相似。

    真是搞不懂微软为何如此吝啬,这么有实力的IT巨头,数据库支持的函数却这么贫瘠。一些我们很需要的函数,总是姗姗来迟。比如像分割字符串的STRING_SPLIT、批量替换的TRANSLATE、去掉两头空格的TRIM等,晚一点就晚一点吧,总比没有强。

    批量替换,看似简单的大问题

    说批量替换问题是小问题,是因为我们总会找到办法处理,配合循环和replace,总有办法解决,但有时候确实会很麻烦,比如,请问您如何把字符串

    12@3#4$56^78*9!/@#$^*

    中的非数字字符替换掉?

    确实不难对吧,比如写个循环把数字抓出来或者把非数字剔除,还比如用replace一个一个替换。循环抓取的我就不写了,有兴趣的朋友可以看看我之前的文章中有过这样的例子,我们下面尝试用replace来实现:

    declare @str varchar(100);set @str='12@3#4$56^78*9!/@#$^*';set @str=replace(@str,'@',space(0));set @str=replace(@str,'#',space(0));set @str=replace(@str,'$',space(0));set @str=replace(@str,'^',space(0));set @str=replace(@str,'*',space(0));set @str=replace(@str,'!',space(0));set @str=replace(@str,'/',space(0));

    运行结果参考下图:

    824fca4fa460c4ff9377116ee9393646.png

    结果是没错的,实现了,估计大部分朋友首先想到的就是这么写。但您觉得爽吗?如果非数字字符还有很多呢?

    真的很不爽,虽然能实现,但确实很麻烦。但如果用translate,就简单多了。下面我们就用神奇的Translate函数试试吧。

    TRANSLATE:另类的批量却能解决大问题

    SQLServer中有一个translate函数,估计您未必熟悉,因这是2017版才推出的函数。有朋友会问,既然有了replace,为何还要多此一举搞个translate出来呢?

    其实translate与replace是大不相同的,我们先看看其语法定义:

    TRANSLATE ( 字符串,待替换字符集,替换为字符集)

    眼尖的朋友应该能看出来,translate函数中,待替换的内容是字符集合,而不是单纯的字符串。还以上面的例子为例。

    12@3#4$56^78*9!/@#$^*

    这里面的非数字字符,有@#$^*!/七个,我们可以批量将7个特殊字符替换掉。脚本如下:

    select translate(@str,'@#$^*!/',space(7));

    怎么样,是不是很简单,第一个参数是待替换的字符串,第二个参数是需要被替换的所有字符,第三个参数是各自替换成对应位置的对应字符。我们一起看看运行效果:

    28d59470f5f17b2760d53531695c14a9.png

    其中七个特殊字符,映射的是七个空格,稍显遗憾,中间的空格并没有被替换掉。这也是translate函数的一个要求,就是待替换字符个数与替换为字符个数必须要一样多。剩余的空格我们结合replace,一次就搞定了,脚本如下:

    select replace(translate(@str,'@#$^*!/',space(7)),space(1),space(0));

    怎么样,是不是很神奇?

    展开全文
  • 莫听穿林打叶声|何妨吟啸且徐行以下是本期内容:hive中解析简单JSON字符串,以及解析比较复杂的嵌套JSON格式的字符串本文大纲:01.get_json_object解析json中的单个属性02.json_tuple解析json中的多个属性03....
  • 在hive中,可以使用substr()函数截取字符串,比如...substr()——在字符串A中从指定位置开始截取一定长度的字符。substr(string A, int start,int length)string A——输入需要处理的字符串int start——开始截取的...
  • 替换和全局命令中, 某些元字符(metacharacters)在查找表达式和替换表达式中的含义是不同的。例如以下命令,查找部分中的“.”因为有特殊意义,所有需要进行转义;而替换部分中的“.”和“$”则会被视为普通文本...
  • IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL DROP FUNCTION dbo.RegexReplace GO --开始创建正则替换函数 CREATE FUNCTION dbo.RegexReplace ( @string NVARCHAR(MAX), -- 被替换字符串 @pattern ...
  • 当你在使用文本文件时,很可能需要查找和替换文件中的字符串。sed 命令主要用于替换一个文件中的文本。在 Linux 中这可以通过使用 sed 命令和 awk 命令来完成。在本教程中,我们将告诉你使用 sed 命令如何做到这一点...
  • 0基础学python(83)Python中,导入re模块后还可以进行字符串替换操作,就是sub()方法,具体的语法格式如下:re.sub(pattern,repl,str,count,flags)和昨天学过的三种匹配字符串的方法一样,模块名re使用一个点"."和...
  • PHP替换字符串中指定字符串 替换指定的次数PHP函数 替换指定出现次数的子字符串$string = "siyuan love xx siyuan love xx siyuan love xx siyuan love xx siyuan love xx";$pattern = "/siyuan/";$replacement = ...
  • 今天为大家带来的内容是:Python中生成一个指定长度的随机字符串实现示例文章内容主要介绍了Python中生成一个指定长度的随机字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...
  • C语言 16行代码实现字符串中指定字符串替换

    万次阅读 多人点赞 2018-08-03 17:05:35
    1.等长字符串替换 2.长字符串替换为短字符串 3.短字符串替换为长字符串 4.中文替换 注意:短字符串替换成长字符串要注意内存越界 其他字符串函数https://mp.csdn.net/postedit/82996174 函数代码 /* 功 能...
  • static string ... //添加转义字符可以替换回双引号  strDest=strDest+"'"; //在此将双引号替换为单引号  msg=msg.substr(intPos+1);   }   strDest=strDest+msg;  return strDest;  }
  • PHP替换字符串中指定字符串 替换指定的次数 PHP函数 替换指定出现次数的子字符串 $string = "siyuan love xx siyuan love xx siyuan love xx siyuan love xx siyuan love xx";
  • 示例效果:"my email is foo@bar.com and my number is (213)-XXX-XXXX"替换成"my email is [EMAIL_ADDRESS] and my number is [PHONE_NUMBER]"1、指定位置替换代码import java.util.ArrayList;import java.util....
  • js 将字符串指定字符全局替换

    万次阅读 2018-05-23 00:21:36
    JavaScript 中的 replace() 方法用于将字符串或其中的子字符串替换指定字符,或替换一个与正则表达式匹配的子串。该方法不会改变原始字符串。 语法 stringObject.replace(regexp/substr, replacement) 它将在 ...
  • Java字符串替换指定位置的字符

    万次阅读 2019-05-27 14:37:10
    首先,String类是不提供这个方法的!所以我们只能用其他类来代替。话不多说,直接上代码!
  • /** * 替换指定字符串 * @param index要替换字符串的位置 * @param res原字符串 * @param str替换字符串 * @return */ public static String replaceIndex(int index,String res,String str){ return res....
  • i、replace方法该方法的作用是替换字符串中所有指定的字符,然后生成一个新的字符串。经过该方法调用以后,原来的字符串不发生改变。例如:Strings=“abcat”;...如果需要将字符串中某个指定字符串替换为其...
  • Java字符串替换? 背景: H5界面UI修改,其中有参数从其他平台传递,因无法修改,故而直接在传递 过来的值中进行处理,然后渲染. 问题: 如何在既定的字符串数据中匹配替换指定的字符串? 解决办法: 大致处理步骤如下:...
  • *在有效的字符串内,用新字符串替换指定的字符串,仅执行一次替换操作 *str: 待替换的字符串源 *oldstr: 被替换的字符串 *newstr: 用于替换的新字符串 *result: 参数输出执行替换后的结果(可用该函数返回值,也可用...
  • 今天在写JavaScript替换字符串时,使用str.replace("a","b")方法替换发现只会替换第一个成功匹配的字符a 而使用如果想要替换全部指定字符时,需要使用str.replace(/\a/g,"b"),这里g为全局标志,可以将全部的a替换成b ....
  • C++的string提供了replace方法来实现字符串替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事。首先明白一个概念,即string替换所有字符串,将”12212″这个字符...
  • // DTString.cpp : 定义控制台应用程序的入口点。
  • Python字符串替换Python字符串替换教程在Python replace()函数详解定义replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数 max,则替换不超过 max 次。语法str.replace(old, new[,...
  • mysql中replace函数直接替换mysql数据库中某字段中的特定字符串,不再需要自己写函数去替换,用起来非常的方便,mysql 替换函数replace()Update `table_name` SET `field_name` = replace (`field_name`,’from_str...
  • 在PHP中可以使用“str_replace()”函数替换指定字符,该函数的作用是将子字符串替换,其用法为“str_replace($search,$replace,$subject) ”,返回值为替换后的字符串。str_replace() 说明str_replace ( mixed $...
  • 函数原型strreplace(str, oldString, newString)例如: >>> pstr = "Hello World!"; >>> afterReplaceStr = strreplace(pstr, " World", " Tom");..."方法一:使用字符串替换...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,782
精华内容 2,312
关键字:

字符串替换指定字符