题目:实现一个函数,把字符串中的每个空格换成“%20”。例如输入“We are happy",则输出"We%20are%20happy".
分析:
第一步:我们可以先扫描一遍字符串,统计空格以及字符的总数,由此可以计算出替换之后的字符串的总长度。
第二步:我们从字符串的后面开始赋值和替换,用一个指针指向新字符串的末尾,用另外一个指针指向源字符串的末尾,先移动源字符串的指针,如果指向的是字符,则在新字符串末尾添加同样的字符,并且向前移动两个指针,如果指针指向的是源字符串中的空格,则在新字符串出添加“%20”,并且把这个指针向前移动三个。
代码如下:
#include<iostream> #include<cstdio> bool InvalidInput=false; using namespace std; void Replace(char string[],int length); int main() { char number[30]={'a',' ','g','a',' ','c','g','f'}; Replace(number,30); //30是原始数组的长度,它的末端都是'\0' for(int i=0;number[i]!='\0';i++) printf("%c",number[i]); return 0; } void Replace(char string[],int length) { if(string==NULL||length<=0) { InvalidInput=true; return ; } //处理无效输入 unsigned int SpaceNumber=0; int OriginalLength = 0; for(int i=0;string[i]!='\0';i++) { if(string[i]==' ') SpaceNumber++; //空格的数目 OriginalLength++; //字符串的长度 } int NewLength= OriginalLength+2*SpaceNumber; int index=NewLength-1; //指向新字符串末端的指针 OriginalLength--; //指向原始字符串的指针 while(OriginalLength>=0&&index>OriginalLength) { if(string[OriginalLength]==' ') { string[index--]='0'; string[index--]='2'; string[index--]='%'; } else string[index--]=string[OriginalLength]; OriginalLength--; } }
运行结果:
Reference:
《名企面试官精讲典型编程题》
何海涛