Romi-知行合一

轻轻的风轻轻的梦,轻轻的晨晨昏昏, 淡淡的云淡淡的泪,淡淡的年年岁岁。
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

字符串操作——移位

Posted on 2012-09-22 20:20  romi  阅读(622)  评论(0编辑  收藏  举报

题目:例如“abcdefgh”这个字符串,移位数是3时,字符串变为“defghabc”

 1 #include <iostream>
 2 #include <string.h>
 3 
 4 using namespace std;
 5 
 6 void StringToRotate(char *str,int n)
 7 {
 8     int len=strlen(str);
 9     if (len<=n)
10     {
11         return;
12     }
13     char *str1=new char[len];
14     for (int i=0;i<len;i++)
15     {
16         if(i<(len-n))
17             str1[i]=str[n+i];
18         else
19             str1[i]=str[i- len+n];
20     }
21     memcpy(str,str1,len);
22     /*
23     for (int j=0;j<len;j++)
24     {
25         str[j]=str1[j];
26     }
27     */
28     delete []str1;
29 }
30 
31 int main()
32 {
33     char str[]="abcdefgh";
34     StringToRotate(str,3);
35     cout<<str<<endl;
36 
37     return 0;
38 }

有几点必须注意,定义中间变量str1存放结果是,不能str1[len]这样,数组必须是个确定的值,

所以才用动态内存分配。因为只需要复制字符串的前len个字符,所以采用mencpy而非strcpy,当str1长度与str相同时才可用strcpy