字符串循环移位的三种算法.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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数据库技术

文档评论(0)

wangshirufeng + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档