博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
替换空格
阅读量:6982 次
发布时间:2019-06-27

本文共 1413 字,大约阅读时间需要 4 分钟。

题目:实现一个函数,把字符串中的每个空格替换成%20。例如,输入“We are happy.”,输出”We%20are%20happy.“。要求在原有的字符串中进行替换,不得使用额外的空间,原有字符串空间保证足够大。

 

直接从前往后地做替换,会导致一些字符移动多次。转换思路,从后往前做替换,这样每个字符只需要移动一次。

首先遍历一遍字符串,得出空格的数目,因为空格占一个字符,替换后%20占3个字符,那么每多一个空格,所需空间增加2个字符。例如上面例子,有2个空格,算上字符串结束标志'\0',共14个字符,替换后变成14+2*2=18个字符。

 

#include 
void ReplaceBlank(char string[], int length) { if(string == NULL || length <= 0) return; int originalLength = 0; //字符数组实际长度 int numberOfBlank = 0; //空格数 int i = 0; while(string[i] != '\0') { originalLength++; if(string[i] == ' ') { numberOfBlank++; } i++; } int newLength = originalLength + 2 * numberOfBlank; //空格被替换后的长度 if(newLength > length) return; int indexOfOriginal = originalLength; //指向原始字符串结尾的指针 int indexOfNew = newLength; //指向替换空格后字符串结尾的指针 while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) { if(string[indexOfOriginal] == ' ') { string[indexOfNew--] = '0'; string[indexOfNew--] = '2'; string[indexOfNew--] = '%'; } else { string[indexOfNew--] = string[indexOfOriginal]; } indexOfOriginal--; } }int main() { char s[30] = "We are happy."; ReplaceBlank(s, 30); int i = 0; while(s[i] != '\0') { printf("%c",s[i]); i++; }}

 

转载于:https://www.cnblogs.com/13jhzeng/p/5289130.html

你可能感兴趣的文章
市场规模占全国4成,广东物联网市场发展强劲
查看>>
ICS—CERT官网公示匡恩网络新发现四工控漏洞
查看>>
英国电价与光伏容量占比关系分析
查看>>
浅谈对5G核心网演进方向的几点展望
查看>>
明智地选择数据中心的五个注意事项
查看>>
开启物联网的真正潜力需要在更大程度上克服数据挑战
查看>>
张小龙公布微信小程序进展 可直接从桌面进入
查看>>
手机芯片三国杀:高通、联发科、展讯都想成霸主
查看>>
六大技巧提升员工信息安全意识
查看>>
保利协鑫多晶硅产量再创历史记录
查看>>
爱屋及乌 年轻投资者因喜爱Snapchat亏钱也买Snap股票
查看>>
物联网产品背后潜藏着危机
查看>>
阿里云将增设马来西亚数据中心 中国技术获赞
查看>>
与Netflix合作 美电视运营商推出4K频道
查看>>
Struts2中的Action
查看>>
Balluff推出刀具识别系统
查看>>
美国支付巨头Verifone遭遇网络攻击
查看>>
开平推进智慧城市等领域信息化建设及公共数据资源共享
查看>>
宜兴电信成功跨界合作开拓农村物联网市场
查看>>
Oracle业务适合用PostgreSQL去O的一些评判标准
查看>>