一道面试题
来源:互联网 发布:商业会计的软件 编辑:程序博客网 时间:2024/05/22 00:43
编写一个方法,将字符串中的空格全部替换为“%20”,假设字符串有足够的空间新增字符,并且知道字符串的真实长度;
输入:“Mr John Smith”
输出: "Mr%20John%20Smith"
#include<string>
#include<iostream>
#include<memory>
#include<algorithm>
using std::endl;
using std::cin;
using std::cout;
using std::tr1::shared_ptr;
typedef std::string::iterator iterStr;
typedef struct{
iterStr pBegin;
iterStr pEnd;
}chk;
void changeString(std::string& str, const shared_ptr<chk>& pChk)
{
iterStr pBegin = pChk->pBegin;
iterStr pEnd = pChk->pEnd;
str.erase(pBegin, pEnd);
std::string curStr = { "%20" };
str.insert(pBegin, curStr.cbegin(), curStr.cend());
}
void changeAll(std::string& str)
{
int countRef = 0;
std::tr1::shared_ptr<chk> Chk = std::make_shared<chk>();
iterStr pBegin = str.begin();
while (pBegin != str.cend()){
if (*pBegin == ' ')
{
++countRef;
if (countRef == 1)
{
Chk->pBegin = pBegin;
}
else if (countRef == 2)
{
countRef = 0;
Chk->pEnd = pBegin+1;
changeString(str, Chk);
}
}
++pBegin;
}
if (countRef == 1 && pBegin == str.end())
{
Chk->pEnd = pBegin;
changeString(str, Chk);
}
}
int main()
{
std::string str = { " I am a People" };
changeAll(str);
/*
std::string str1 = { "%20" };
std::tr1::shared_ptr<chk> pChk = std::make_shared<chk>();
pChk->pBegin = str.begin()+1;
pChk->pEnd = str.begin()+3;
changeString(str, pChk);
*/
cout << str << endl;
int x;
cin >> x;
return 0;
}
- 一道微软面试题
- 一道面试题
- 华为一道面试题
- 一道面试题
- 一道面试题
- 一道sql面试题
- 一道面试题
- 一道面试题
- 一道华为面试题
- 一道面试题
- 一道微软面试题
- 一道c++面试题
- 一道sql面试题
- 关于一道面试题
- 一道面试题
- 一道microsoft面试题
- 一道javascript面试题
- 一道面试题
- google.com 还会换IP
- CheckBoxAndRadio应用
- Delphi类里面的方法和类型定义不影响创建实例的大小
- Algorithms—39.Combination Sum
- 给敏捷团队中的架构师的10个建议
- 一道面试题
- 腾迅不敢发放的一个QQ号码
- 未来的十倍股在哪里
- [DS][Hash][PAT][Hashing Hard Version]
- 留住你的用户:8款第三方移动推送服务
- 【CCF】Z字形扫描
- AWK简介
- 股权转让所得个人所得税管理办法(试行)
- 图片下载和保存