剑指offer 05.替换空格 与 string.resize用法

题目描述

在这里插入图片描述

思路

初见这道题,第一眼想得到就是:遍历字符串将空格替换成字符串就完了。
后面仔细想了发现:要替换的字符串长度要大于原本的空格位置的长度,而字符串又是以数组的形式存在的。
所以需要对数组进行对应长度的resize()

那么如何来计算需要resize()的长度呢?
通过遍历初始字符串,统计空格的数量,之后利用s.resize(oldsize+countNull*2)就可以了。

拓展(字符串和字符数组的区别

在字符数组中:
在这里插入图片描述
在计算机中存储方式为:
在这里插入图片描述

而在string中,没有'\0'这一停止符,提供一个s.size()接口用来判断边界。

vector<char>string有什么区别呢?
其实没有很大的区别,只是string有更多的字符串操作接口,一般操作字符串时还是将其定义为string

代码实现

class Solution {
    
    
public:
    string replaceSpace(string s) 
    {
    
    
        int oldsize=s.size();
        int CountNull=0;
        for(int i=0;i<s.size();i++)
        {
    
    
            if(s[i]==' ')
            {
    
    
                CountNull++;
            }
        }

        s.resize(oldsize+CountNull*2);
        int newsize=s.size();
        for(int i=oldsize-1,j=newsize-1;i<j;i--,j--)
        {
    
    
            if(s[i]!=' ')
            {
    
    
                s[j]=s[i];
            }
            else
            {
    
    
                s[j]='0';
                s[j-1]='2';
                s[j-2]='%';
                j=j-2;
            }
        }
        return s;
    }
};

Guess you like

Origin blog.csdn.net/weixin_45847364/article/details/121737153