面试题4-替换空格

来源:互联网 发布:ansys fluent软件下载 编辑:程序博客网 时间:2024/05/17 22:40

题目:

请实现一个函数,把字符串中每个空格替换成“%20”,例如输入“We are happy” ,则输出“We%20are%20happy”

这个题目很简单,只要先统计出空格的个数,计算出新的字符串的长度,从后往前移动即可。时间复杂度为0(n)

主要注意一下几点

(1)字符数组的替换,其长度就会发生变化,变长就有空间不足的情况(考虑在字符串自身上变化,如果新开辟空间的话问题就太简单了),所以首先确保有充足的空间

(2)不要用string类型来存字符串,因为string字符串不能动态的增长,字符串发生变化实际是指向了另外一块空间。

具体实现如下:

#include <iostream>#include <string>using namespace std;//length表示str能够表示的str的最大容量void  ReplaceBlank(char str[], int length){if(str != NULL && length>0){int originalLength = 0;  //原字符串的长度int numberOfBlank = 0;   //空格个数for(int i=0; str[i]!='\0'; i++ ){++originalLength;if(str[i]==' '){++numberOfBlank;}}int newLength = originalLength+2*numberOfBlank;if(newLength > length){//说明str这个数组存不下这个新的字符串return;}for(int i=originalLength; i>=0; --i){if(str[i]==' '){str[newLength--] = '0';str[newLength--] = '2';str[newLength--] = '%';}else{str[newLength--] = str[i];}}}}/************************************************************************//* 测试用例   1.有正常空格   2.前有空格   3.前后都有空格   4.后有空格   5.没有空格   6.全是空格   7.NULL的情况   8.字符串为空串*//************************************************************************/void Test(char *testName, char str[], int length, char expected[]){if(testName == NULL){cout<<testName<<" begin:";}ReplaceBlank(str,100);if(expected == NULL && str == NULL){cout<<"Passed"<<endl;}else if(expected == NULL && str != NULL){cout<<"Failed"<<endl;}else if(strcmp(str,expected) == 0){cout<<"Passed"<<endl;}else{cout<<"Failed"<<endl;}}void Test1(){char str[100] = "We are happy";Test("Test1", str, 100, "We%20are%20happy");}void Test2(){char str[100] = " are happy";Test("Test2", str, 100, "%20are%20happy");}void Test3(){char str[100] = " are ";Test("Test3", str, 100, "%20are%20");}void Test4(){char str[100] = "We are ";Test("Test4", str, 100, "We%20are%20");}void Test5(){char str[100] = "happy";Test("Test5", str, 100, "happy");}void Test6(){char str[100] = "  ";Test("Test6", str, 100, "%20%20");}void Test7(){Test("Test7",NULL, 100, NULL);}void Test8(){char str[100] = "";Test("Test8", str, 100, "");}int main(){Test1();Test2();Test3();Test4();Test5();Test6();Test7();Test8();return 0;}


0 0
原创粉丝点击