面试题4:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%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; }
“过一个平凡无趣的人生实在太容易了,你可以不读书,不冒险,不运动,不写作,不外出,不折腾……但是,人生最后悔的事情就是:我本可以。”——陈素封。