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

来源:互联网 发布:unity3d动画制作教程 编辑:程序博客网 时间:2024/04/30 20:58
#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