请实现一个函数,把字符串中的每个空格替换成“ ”
2016-05-09 23:03
344 查看
题目:替换空格---请实现一个函数,把字符串中的每个空格替换成“%20”
例子:We are happy.\0替换后:We%20are%20happy.\0
思路:从字符串的后面往前替换,这样字符移动的次数少,时间复杂度为:O(n);如下图1:
1、首先得遍历字符串,计算字符串的真实长度,以及空格的个数;
2、计算替换空格后的长度,2*空格个数+字符串真实长度
3、当字符不等于' '时,就往后挪字符;当字符等于' '时,就去添加%20
代码如下:
<span style="font-size:18px;">#include<iostream> using namespace std; void ReplaceBlack(char str[],int len) { if (str == NULL || len <= 0) { return; } int i = 0; int relLen = 0;//str的真实长度 int numOfBlack = 0; // 空格的个数 while (str[i] != '\0') { if (str[i] == ' ') { ++numOfBlack; } relLen++; ++i; } int _len = relLen + 2 * numOfBlack;//替换后的总长度 while (relLen < _len && relLen > 0) { //1.当字符不等于' '时,就往后挪字符 //2.当字符等于' '时,就去添加%20 if (str[relLen] != ' ') { str[_len--] = str[relLen]; } else { str[_len--] = '0'; str[_len--] = '2'; str[_len--] = '%'; } relLen--; } } int main() { char str[30] = { "We are happy." }; ReplaceBlack(str, sizeof(str)); cout << str << endl; return 0; }</span>
结果如下图2:
图1:
图2:
相关文章推荐
- 网络dos
- Android成长之路(5)——了解Fragment
- 『Python』os库练习题及答案
- 单元测试 mock EF 中DbContext 和DbSet Include
- HDOJ-2665 Kth number(主席树)
- Java基础知识汇总
- 抽象类和接口联系与区别
- 问题:android学习内容破碎,我个人关于如何学习android的一些个人经历
- Flume与SparkStreaming集成
- STL vector用法介绍
- 手把手教你SOAP访问webservice并DOM解析返回的XML数据
- 第14th广东省赛总结
- java 线程六-解决线程安全隐患问题-加锁
- Fragment之我的解决方案:Fragmentation
- 第四百零二天 how can I 坚持
- 如何把mysql的ID归0?
- Mysql 启动 windows
- log4j-1简单介绍与配置--eclipse
- c++实验5——作业
- dddd