东莞专业的网站建设网络推广小程序需要多少钱
web/
2025/9/26 8:16:02/
文章来源:
东莞专业的网站建设网络推广,小程序需要多少钱,电子商务网站前台建设,七牛链接wordpress今天看题的时候#xff0c;遇到一个替换空格的题目#xff0c;分析一下哈。
题目要求#xff1a;把字符串中的每个空格替换成“%20”。例如输入“we are happy”#xff0c;则输出“we%20are%20happy”。
解题思路#xff1a;我们首先想到的是#xff1a;移位思想。遇到…今天看题的时候遇到一个替换空格的题目分析一下哈。
题目要求把字符串中的每个空格替换成“%20”。例如输入“we are happy”则输出“we%20are%20happy”。
解题思路我们首先想到的是移位思想。遇到空格就将空格后的所有字符后移两位然后填充空格为%20。
实现代码
#pragma once
#includeassert.h
#includestring.hchar* StrReplace(char* str,size_t length)
{assert(str length 0);char *p str;char *p1 str;size_t len strlen(str)1;size_t i len;while(p){while(*p ! ){p;if(*p \0){return str;}}while((p1i) ! p){*(p1i1) *(p1i-1);i--;}len2;i len;*p %;*(p1) 2;*(p2) 0;p2;}return str;
}void Test()
{char str[20] we are happy;coutStrReplace(str,20)endl;
}
但是我们再看看它的时间复杂度哈。显然每次移位操作都是ON,这样经过多次移位使它的时间复杂度就变为ON^2。这样的效率实在有点低。我们如何提高它的时间复杂度呢
思路2我们可以用计数的方式统计字符串中总共的空格数然后从后向前移位使用两个指针p1指向字符串开始的位置p2指向字符串尾部移位将p2移动2*空格个数位遇到空格后填充直到两指针相遇才停止移位。如图所示移位过程 实现代码
#pragma once
#includeassert.h
#includestring.h
char* StrReplace(char* str,size_t length)
{assert(str length 0);char *p str;char *p1 NULL;char *p2 NULL;size_t len strlen(str);int count 0;//统计空格数while(*p ! \0){if(*p )count;p;}count*2;p1 strlen; //指向字符串尾p2 strlencount; //指向修改后字符串正确的位置while(p1 ! p2){if(*p1 ){p2 - 2;*p2 %;*(p21) 2;*(p22) 0;if(p1 ! p) //如果p1没有到字符串头时再减防止越界{p1--;p2--;}}else //不是空格则直接后移{*p2 *p1;p1--;p2--;}}return str;
}void Test()
{char str[20] we are happy;coutStrReplace(str,20)endl;char str1[20] are happy;coutStrReplace(str1,20)endl;
}
执行结果
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82092.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!