1.问题
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1: 输入:s = "We are happy."
输出:"We%20are%20happy."
2.说明
输入说明:
输入一个字符串s
输出说明:
输出替换空格后的字符串
3.范例
输入范例:
we are h
输出范例:
we%20are%20h
4.思路
使用双指针方法,对字符串数组进行扩充空间,而扩充多少则需要对字符串计算其空格个数,再根据将空格替换成%20这三个字符,因此需要在原空间上扩充空格数的2倍;
其次下标代替指针,其中 j =原字符串最后一个字符,i = 扩充空间后的字符串最后一个位置,开始重后往前遍历,s[j]!=' '时,将下标 j 的字符放入 下标 i 处,当=‘ ’时,则在下标i往前三个位置分别放入%20,并将i往前移动3格
5.代码
#include <iostream> #include <string> #include <algorithm> using namespace std; class Solution { public: //替换空格 string replaceSpace(string s) { int oldsize=s.size(); int count=0; //1.计算字符串中有多少个空格 for(int i=0;i<s.size();i++) { if(s[i]==' ') count++; } //2.扩充数组大小 s.resize(s.size()+count*2);//weishenme *2呢?原来就有空格一个空间,此处可以放%,增加2个空间,一个空间存2,一个空间存0 //3.定义双下标,从后往前遍历,j为原s最后一个字符位置,i为扩充后最后一个字符的位置 int newsize=s.size(); for(int i=newsize-1,j=oldsize-1;j<i;j--,i--) { if(s[j]!=' ') { s[i]=s[j]; } else { s[i]='0'; s[i-1]='2'; s[i-2]='%'; i -=2; } } return s; } }; int main() { string s; getline(cin,s); string res=Solution().replaceSpace(s); cout<<res<<endl; return 0; }
标签:空格,下标,int,力扣,字符串,20,include,替换 From: https://www.cnblogs.com/ohye/p/17726552.html