替换空格之双指针

替换空格

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

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

可以使用双指针的方式来实现字符串中空格的替换,具体做法如下:

  • 第一次遍历字符串 s,统计出其中空格的个数,由于每个空格需要被替换成三个字符 %20,因此可以根据空格的数量计算出替换后字符串的长度。
  • 在原字符串长度的基础上增加替换后字符串的长度差,从而扩展字符串的长度。
  • 使用双指针法,分别从字符串结尾和扩展后的字符串结尾开始向前遍历,当指针指向空格时,将其替换为 %20。
  • 当指针不再指向空格时,将指针所指的字符直接复制到新字符串中。
class Solution {
public:
    string replaceSpace(string s) {
        int count = 0, len = s.size();
        for (int i = 0; i < len; ++i) {
            if (s[i] == ' ') {
                ++count;
            }
        }
        int new_len = len + count * 2;
        s.resize(new_len);
        int i = len - 1, j = new_len - 1;
        while (i >= 0 && j >= 0) {
            if (s[i] == ' ') {
                s[j--] = '0';
                s[j--] = '2';
                s[j--] = '%';
            } else {
                s[j--] = s[i];
            }
            --i;
        }
        return s;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: #include<iostream> using namespace std; int main(){ char arr[] = "Hello World!"; char *p = arr; while(*p != '\0'){ if(*p == ' '){ *p = '_'; } p++; } cout << arr << endl; // 输出:Hello_World! return 0; } ### 回答2: 要编写程序用下划线替换数组中的空格元素,使用指针访问数组,不能使用下标。我们可以按照以下步骤进行编写: 1. 首先,定义一个字符指针变量,指向数组的起始地址。假设数组名为arr。将指针变量p指向arr。 2. 使用循环,判断当前指向的字符是否为空格。若为空格,则将指针变量p指向的字符替换为下划线。 3. 使用指针运算,将指针变量p向后移动到下一个字符的地址。这可以通过将p加1来实现。 4. 重复步骤2和步骤3,直到遍历完整个数组。 5. 最后,输出替换完成的数组。 下面是一个示例代码的实现: ```c #include <stdio.h> void replaceSpace(char* arr) { char* p = arr; // 定义一个指针变量,指向数组的起始地址 while (*p != '\0') { // 遍历数组直到遇到字符串结束符 if (*p == ' ') { // 判断当前指向的字符是否为空格 *p = '_'; // 若为空格,则替换为下划线 } p++; // 将指针变量向后移动到下一个字符的地址 } } int main() { char arr[] = "Hello World!"; // 示例数组 replaceSpace(arr); // 调用函数替换空格 printf("%s\n", arr); // 输出替换完成的数组 return 0; } ``` 以上代码将输出"Hello_World!",其中空格已被下划线替换。这样,我们就成功地用指针访问数组,并且实现了空格替换的功能。 ### 回答3: 要编写程序,用下划线替换数组中的空格元素,使用指针访问数组,不能使用下标。 首先,我们需要定义一个待处理的数组,其中包含空格元素。然后,我们将创建一个指针变量,用于访问数组中的每个元素。接下来,我们使用循环来遍历整个数组,直到指针指向数组的末尾。 在每个迭代中,我们将检查当前指针所指向的元素是否为空格。如果是空格,则将其替换为下划线。为了实现这一点,我们可以使用条件语句来比较当前元素与空格的ASCII值(32)是否相等。如果相等,则将指针所指向的值修改为下划线的ASCII值(95)。 最后,我们继续向下移动指针,以便访问下一个元素。这可以通过将指针变量递增一个单位实现。 下面是一个示例程序: ```c++ #include <iostream> using namespace std; int main() { // 定义待处理的数组 char arr[] = "Hello world! This is a test."; // 创建指向数组的指针 char* ptr = arr; // 遍历数组并替换空格元素 while (*ptr != '\0') { if (*ptr == ' ') { *ptr = '_'; } ptr++; } // 输出替换后的数组 cout << arr << endl; return 0; } ``` 在这个示例程序中,我们首先定义了一个包含空格元素的字符数组。然后,我们创建了一个指针变量 `ptr`,并将其指向数组的起始位置。接下来,我们使用一个 `while` 循环来遍历数组中的每个元素,直到指针指向数组的结束标志 `'\0'`。在每个迭代中,我们检查指针指向元素的值是否为 `' '`,如果是,则将其替换为 `'_'`。最后,我们递增指针,继续向下遍历数组。最终,我们输出替换后的数组。 这样,我们就成功地编写了一个程序,用下划线替换数组中的空格元素,并使用指针来访问数组,而不使用下标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起机器学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值