程序员面试金典: 9.1数组与字符串 4字符串中空格全部替换为"%20"

#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>

using namespace std;

/*
问题:编写一个方法,将字符串中的空格全部替换为“%20”。
      假定该字符串尾部留有足够的控件存放新增字符,并且知道字符串的真实长度
分析:先扫描字符串,计算出空格总数n,字符串长度L,由于一个空格和“%20”相差两个字符,
      因此替换后的字符串总长度为=L + 2n
	  然后将原字符串依次从后向前拷贝至新子串对应位置

输入:
chao ma yan ma
输出
chao%20ma%20yan%ma

关键:
1 先扫描字符串,计算出空格总数n,字符串长度L,由于一个空格和“%20”相差两个字符,
      因此替换后的字符串总长度为=L + 2n
	  然后将原字符串依次从后向前拷贝至新子串对应位置
2 需要支持带空格的字符串,使用getline(cin , str)
*/

string stringReplace(string& str , const char findStr , const string& replaceStr)
{
	int pos = 0;
	int iCount = 0;
	//如果找到该字符串
	while( string::npos != str.find(findStr , pos))
	{
		iCount++;
		pos = str.find(findStr , pos) + 1;
	}
	int totalLength = str.length() + 2 * iCount;
	int i = totalLength - 1;
	int j = str.length() - 1;
	vector<char> str2(totalLength , 'a');
	for( ; j >= 0 ; )
	{
		//如果不是待查找字符
		if(str[j] != findStr)
		{
			//这边长度还没有开启
			str2[i--] = str[j--];
		}
		//如果是待查找字符,则令当前为“0”
		else
		{
			str2[i--] = '0';
			str2[i--] = '2';
			str2[i--] = '%';
			j--;
		}
	}
	string sResult = "";
	vector<char>::iterator it = str2.begin();
	for( ; it != str2.end() ; it++ )
	{
		sResult += *it;
	}
	return sResult;
}

int main(int argc, char* argv[])
{
	string str;
	//需要支持带空格的字符串
	while( getline(cin , str))
	{
		char findStr = ' ';
		string replaceStr = "%20";
		string result = stringReplace(str , findStr , replaceStr);
		cout << result << endl;
	}
	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值