替换空格

题目:请实现一个函数,把字符串中的每个空格替换成”%20”。例如:输入”we are happy.”,则输出”we%20are%20happy.”

思路分析:
我们比较替换之前与替换之后的字符串长度,很明显,字符串长度增加了4,所以,第一点,将”we are happy.”用一个字符指针指向肯定不可行,那么就应该将其放入一个数组中。其次我们就应该考虑如何输出想要的结果。
1.题目没有给出要求,那么有一种笨的办法就是将字符串逐渐赋值到另外一个数组中,遇到空格就给新的数组插入”%20”,这样也可以输出结果。这样的时间复杂度和空间复杂度都是O(N)。但是想一想,这是一道面试题啊,怎么可能如此简单。
2.利用两个数组的做法显然被pass掉了,那只能在一个数组内操作了。既然数组长度扩大了,我们可以想成每个空格后边的字符都向后移动了一定的位置,空出来的位置刚好够插入”%20”。我们画张图来解释一下:
这里写图片描述

上边这种方法的时间复杂度还不是让人最满意的,应该有一种最好的办法既能让时间复杂度降低还能达到预期目标。
如果我们每次能将移动的字符一次性放好位置,那样就比较方便了。因此我么需要提前知道增加长度后数组的大小,那么我们就能给出两个下标,一个指向新字符串的末尾,一个指向旧字符串的末尾,从后向前遍历一边,就能实现每次都将字符一次性放好位置。
这里写图片描述
时间复杂度分析:由于从后往前只需要遍历一次数组,其时间复杂度为O(N)
代码:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>

//时间复杂度:O(N)
void Replace(char* str,int old)     
{
    char* start = str;
    int blacknum = 0;
    int newlen = 0;
    int prev = 0;
    int last = 0;
    if ((str == NULL) || (old < 0))
    {
        return ;
    }

    while (*start != '\0')
    {
        start++;
        if (*start == ' ')
        {
            blacknum++;     //统计空格的个数
        }
    }

    newlen = old+blacknum*2;        //替换后新的字符串长度
    prev = old;
    last = newlen;
    while (prev > 0)  //这里不能为prev>=0,否则会产生内存溢出
    {
        str[last--] = str[prev--];

        if (str[prev] == ' ')
        {
            str[last--] = '0';
            str[last--] = '2';
            str[last--] = '%';
            prev--;
        }
    }
}

底下为测试代码:

int main()
{
    char str[] = "we are happy";
    int len = strlen(str);

    Replace(str,len);
    printf("%s\n",str);

    system("pause");
    return 0;
}
<think>嗯,用户想了解SublimeText中替换空格的教程或快捷方式。之前引用中提到过相关操作,包括用空格替代tab键的设置(引用2)和删除空行的正则表达式(引用1),用户特别强调要替换"空格",可能有两种需求:1)将空白字符(如tab)转空格2)直接删除或修改普通空格字符。用户提供的引用材料很有价值:引用2详细说明了如何通过修改配置自动将tab转为空格,这个应该重点推荐。而引用1里的正则删除空行方法稍作改动也可用于删除连续空格,但用户没提删除需求,可能更关注转换。考虑到用户明确询问的是"替换空格的方法",其实有两种可能的操作:1.自动转换输入:在用户编辑时自动用空格替换tab键,这是最常用的场景2.批量修改:对现有文件替换(比如多个空格转一个)用户问的是"替换空格",但结合上下文应该是想用空格替代tab。引用2完整介绍了配置方法,可以直接用"方法一"回答(更简单),同时补充"方法二"快捷键映射作为备选。另外需要区分:-普通空格:直接查找替换即可(Ctrl+H输入空格-特殊空白:包括tab、不间断空格等,需要正则表达式用户没说明具体场景,所以回复要分层:优先解答最可能的tab转空格配置,再补充其他空格处理技巧。引用3的快捷键(如Ctrl+H打开替换)也需要整合进去。最后可以加个应用场景提示,比如代码规范常用4空格缩进,避免用户误操作。</think> 以下是在 Sublime Text 中替换空格的详细教程,结合引用内容和高效操作指南: --- ### 方法一:配置编辑器自动将 Tab 键替换空格(推荐) 1. **修改用户配置** 打开设置:`Preferences` → `Settings`(Windows/Linux: <kbd>Ctrl</kbd>+<kbd>,</kbd>;macOS: <kbd>Cmd</kbd>+<kbd>,</kbd>) ```json { "tab_size": 4, // 设置1个Tab=4个空格 "translate_tabs_to_spaces": true, // 强制将Tab转为空格[^2] } ``` - 保存后**立即生效**,新输入的 Tab 键自动转为空格--- ### 方法二:批量替换已有文件中的空格/制表符 1. **正则替换**(适用于空行、多余空格等) - 打开替换面板:<kbd>Ctrl</kbd>+<kbd>H</kbd> - 启用正则匹配:点击左侧`.*`图标 - **删除所有空行**: ``` Find: ^[\s]*$\n Replace: (留空) ``` - **合并连续空格**(例如将2+空格替换为1个): ``` Find: \s{2,} Replace: (单个空格) ```[^1] 2. **可视化编辑**(精准控制) - 按住<kbd>Alt</kbd>用鼠标**拖动选中多列**区域 - 直接输入空格覆盖原有内容[^3] --- ### 方法三:直接替换特定空格字符 1. **基础操作**:<kbd>Ctrl</kbd>+<kbd>H</kbd> - `Find` 输入待替换空格(例如输入5个空格- `Replace` 输入目标字符(如2个空格或空字符) 2. **特殊空白字符处理** - 制表符`\t`替换空格:`Find`输入`\t` → `Replace`输入空格 - 不间断空格`\u00A0`:粘贴该字符到查找框替换 --- ### ⚠️ 注意事项 1. 若配置文件修改后**不生效**,检查是否存在冲突设置(如插件影响) 2. **正则匹配关键符号**: - `\s` 匹配所有空白(含空格/Tab) - `^` 行首, `$` 行尾, `\n` 换行符 3. **显示空格**(辅助编辑): ```json {"draw_white_space": "all"} // 设置中开启可视化空格[^1] ``` > **应用场景**:代码缩进规范(Python强制空格)、清理文档多余空格、JSON/XML格式优化等。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值