机试(一)chapter2.6 替换字符串 O(n)

本文详细解析了在C++中如何高效地将字符串中的空格替换为%20,介绍了从后向前遍历字符串的O(n)算法实现,并强调了使用char数组而非char指针的重要性,避免内存访问错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


犯了一个错误,char× 在C++ 中会 直接定义一块内存,不可访问内存以外的地方,所有用到该常量字符串的地方都是一个地址,
所以用str[p2]时,会报错,SIGSEGV (Segmentation fault),就是说内存访问错误,
所以应该用char [],只指定 字符串首地址,便可以访问了
#include <iostream>
using namespace std;
//替换空格
//首先询问,是在原字符串上修改,还是新创字符串修改
//o(n平方) 从前面,每找到一个空格,就增加两个,替换
//0(n):从后面
//                  首先统计空格个数,计算出替换后最终的个数
//                  然后两个指针,一个指向新字符串的尾,
//                                              一个指向旧字符串的尾
//                  从后面开始遍历,当旧指针  遇到空格, --
//                                              新指针用%20替换
bool replaceStr(char str[], int length)
{
    int count=0;
    int i=0;
    //统计空格个数
    while(str[i]!='\0')
    {
        if(str[i] ==' ')
        {
            count++;
        }
        i++;
    }
    int old_length = length;
    //计算新字符串长度
    int new_length = 2*count+old_length;
    int p2=new_length;
    int p1 = old_length;
    //从后面遍历替换空格
    for(;p2>=0&&p1>0;p2--,p1--)
    {
                // 不是空格时
                if(str[p1]!=' ')
                {
                    str[p2] = str[p1];
                }

                //是空格时,替换
                else
                {
                    str[p2] = '0';
                    str[--p2] = '2';
                    str[--p2] = '%';
                }

    }
    return true;

}



int main()
{
    char str[] = "We are happy.";
    replaceStr(str,14);
    cout<<str<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值