字符串循环右移n位.doc

字符串循环右移n位.doc

ID:59357528

大小:32.50 KB

页数:5页

时间:2020-09-04

字符串循环右移n位.doc_第1页
字符串循环右移n位.doc_第2页
字符串循环右移n位.doc_第3页
字符串循环右移n位.doc_第4页
字符串循环右移n位.doc_第5页
资源描述:

《字符串循环右移n位.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、c语言输入一个字符串循环右移n个得到一个新的字符串2011-5-1522:25提问者:匿名

2、浏览次数:880次老师布置了一道题编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“hellow“如果n=2,移位后应该是“owhell”我偷了小懒用下面的方法实现了但是当n=4程序的h就输入不出来了那为高手帮忙解释下谢谢了#include#includevoidLoopMove(char*s,intn){char*s1;intt1=strlen(s);intt=strlen(s)-n;chars2[]={0};s1=s

3、+t;printf("%d",t);strcpy(s2,s1);strncpy(s2+n,s,t);strcpy(s,s2);}intmain(){intn=4;chars[]="hello";char*p=NULL;LoopMove(s,n);printf("%s",s);}谢谢!我来帮他解答2011-5-1522:50满意回答有问题找代码:chars2[]={0};这里相当于s2是1个字符的数组。当对它做类似strcpy(s2,s1);的操作时,只要s1的长度(这里是n)大于1,就会出现数组访问越界。对于像数组访问越界这种错误会引发的结果是不确定性,有可能程

4、序正常运行,也可能会崩溃,取决于越界之后访问到的内存地址的相关属性。将s2改一个动态数组,程序就能正常运行。代码如下:#include#include#includevoidLoopMove(char*s,intn){char*s1;intt1=strlen(s);intt=strlen(s)-n;char*s2=(char*)malloc((t1+1)*sizeof(char));//分配t1+1个字符的空间,之所以加1是因为C中字符串默认以''结尾,strlen的结果是没包含这个''的。memset(

5、s2,0,t1+1);//清空s2的内容s1=s+t;printf("%d",t);strcpy(s2,s1);strncpy(s2+n,s,t);strcpy(s,s2);free(s2);//释放资源}intmain(){intn=4;chars[]="hello";char*p=NULL;LoopMove(s,n);printf("%s",s);}在一次面试题中曾遇到过一个题目是使字符串循环移动指定的位数!下面和大家讨论几点有关的算法!#include#include#includevoidstrR

6、ightMove(char**a,intbit){intlen=strlen(*a);if(bit%=len){char*str=(char*)malloc(len+1);strncpy(str,(*a+len-bit),bit);str[bit]='';strncat(str,*a,len-bit);*a=str;}}intmain(){char*a="1234567890";strRightMove(&a,5);puts(a);return0;}当然还有其他方法#include"string.h"#include"stdlib.h"voidright_shift

7、(char*dest,intshift){char*temp=NULL;intlen=0;intactual=0;inti=0;intsub=0;if(shift<0){printf("Errornumber");return;}if(dest==NULL

8、

9、*dest==''){printf("Error:Nullstring");}len=strlen(dest);actual=shift%len;if(actual==0)return;temp=(char*)malloc(sizeof(char)*(len+1));for(i=actual;i

10、;++i){temp[i]=dest[i-actual];}sub=len-actual;for(i=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。