- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
字符串循环移位的三种算法.pdf
更多资源,请登录IT部落格()~致力于分享C/C++/MFC编程语言,PHP/Python脚本
,MySQL/MSSQL/Oracle数据库技术
字符串循环移位的三种算法
如题:将一个n位字符串进行循环移位k 。例如:对于字符串abcdef循环移位k=2 ,则输
出cdefab 。
1、算法一思想:
采用一个辅助空间,将要移动到末尾的k位存储到一个k位的辅助空间,先 n-
k个字符往字符串前面移动,然后将辅助空间的k个字符复制到原数组后面。在这里可
以采用strncpy函数来简化操作,这个函数是用来拷贝指定地址指定字节的字符串。
2、算法二思想:
直接采用一次交换的思想,即从第i+1个字符开始,将其放置到最终目标位置,当循环
结束,所有的字符均到目标位置,达到字符串循环的目的。
3、算法三思想:
从第1到第i个字符倒序,第i+1到第n个倒序,最终所有字符再一次倒序,即可完成字
符串循环的目的。
实现代码如下(VC6.0通过测试):
#include stdio.h
#include string
using namespace std;
// 申请辅助空间 空间复杂度为O(n)
void ne(char * str,int i)
{
//将首部i个字符串拷贝到辅助数组
char* temp=new char[i+1];
strncpy(temp,str,i);
temp[i]=\0;
//将第i个字符后面的字符全部前移i个位置
strncpy(str,str+i,strlen(str)-i);
更多资源,请登录IT部落格()~致力于分享C/C++/MFC编程语言,PHP/Python脚本
,MySQL/MSSQL/Oracle数据库技术
//从辅助空间拷贝i个字符到原字符串尾部
strncpy(str+strlen(str)-i,temp,i);
//释放辅助数组
delete[] temp;
printf(%s\n,str);
}
//字符串循环移位 空间复杂度为O(1)
void re(char * str,int i)
{
//把每个字符置换到目标位置
for(int j=i;jstrlen(str);j++)
{
swap(str[j],str[j-i]);
}
printf(%s\n,str);
}
//字符串倒序
void exchange(char *str,int low,int high)
{
int i=low;
int h=high;
//将字符串倒序采用while循环非常不错!
while(ih)
{
swap(str[i],str[h]);
i++;
h--;
}
}
//三次倒序算法 空间复杂度为O(1)
void three(char * str,int i)
{
//首部倒序
exchange(str,0,i-1);
//尾部倒序
exchange(str,i,strlen(str)-1);
//整体倒序
更多资源,请登录IT部落格()~致力于分享C/C++/MFC编程语言,PHP/Python脚本
,MySQL/MSSQL/Oracle数据库技术
exchange(str,0,strlen(str)-1);
printf(%s\n,str);
}
int main()
{
printf(原字符串:abcdef\n);
char name1[]=abcdef;
ne(name1,2);
char name[]=abcdef;
re(name,2);
char test[]=abcdef;
three(test,2);
return 0;
}
输出截图:
更多资源,请登录IT部落格()~致力于分享C/C++/MFC编程语言,P
HP/Python脚本,MySQL/MSSQL/Oracle数据库技术
您可能关注的文档
最近下载
- 土地资源调查课件.pptx VIP
- 2025教学主任及教秘专项培训班考核试卷含答案.docx
- QC∕T 948-2013 汽车顶部装载装置.pdf VIP
- 八上名著《红岩》:故事梗概+知识点+考点大集合.doc VIP
- 《劳动经济学讲义》课件.ppt VIP
- ISO各体系认证审核前准备资料清单.doc VIP
- 巧虎目录清单.doc VIP
- 销售管理专业《销售案例研究 ( 实践 ) 》课程调研报告样本.pdf VIP
- 2025年新精通版(三年级起)英语三年级上册课件 Unit 2 Lesson 3 .pptx VIP
- 场效应MOS管AK4435参数-9.1A-30V封装SOP-8.pdf VIP
文档评论(0)