面试题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
- 面试题4:替换空格
- 面试题4 替换空格
- 面试题4:空格替换
- 面试题4-替换空格
- 面试题4 替换空格
- 面试题4:替换空格
- 面试题4 替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- 面试题4-替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- 面试题4:替换空格
- MFC 在静态文本控件和picture控件上显示位图
- 截取系统时间C++实现
- 北京亚控笔试题目(2014年10月9日)
- NYOJ 题目8 一种排序
- proteus学习篇1
- 面试题4-替换空格
- 【深入QT】信号槽机制浅析
- 上机练习项目二 简单计算问题体验
- 富文本编译器
- IO-拷贝文件测试类----暂存
- POJ 3061 Subsequence
- 追梦PM——记我250天的互联网产品经理求职历程
- android应用开发详解(十四)------------------Intent的ComponentName属性
- 2014南京甲骨文实习生面试