题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。
方法一:利用c++的string类实现,可参见c++中string类的详解
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
int main(int argc, _TCHAR* argv[])
{
string str;
getline(cin,str);//输入字符串可包含空格,注意与cin>>str;的区别
while(str.find(" ")!=-1)//str.find()函数查找不到时返回-1,否则返回查找的位置
{
int pos=str.find(" ");
str.erase(pos,1);//删除空格
str.insert(pos,"%20");//插入字符串
}
cout<<str<<endl;
return 0;
}
方法二:设置两个指针,从后往前进行扫描替换
#include "stdafx.h"
#include <iostream>
using namespace std;
void ReplaceBlank(char string[],int length)
{
if(string==NULL&&length<=0)
return;
int originalLength=0;
int numberOfBlank=0;
int i=0;
while(string[i]!='\0')
{
++originalLength;
if(string[i]==' ')
++numberOfBlank;
++i;
}
int newLength=originalLength+numberOfBlank*2;
if(newLength>length)
return;
int indexOfOriginal=originalLength;
int indexOfNew=newLength;
while(indexOfOriginal>=0&&indexOfNew>indexOfOriginal)
{
if(string[indexOfOriginal]==' ')
{
string[indexOfNew--]='0';
string[indexOfNew--]='2';
string[indexOfNew--]='%';
}
else
{
string[indexOfNew--]=string[indexOfOriginal];
}
--indexOfOriginal;
}
}
int main()
{
const int length=100;
char string[length]="fgsk";
ReplaceBlank(string,length);
cout<<string<<endl;
return 0;
}