首先说一下我的整体思路,循环右移是每右移一次,将最右边的值移出去放到最左边来,但是要保证字符数组长度不变。
我的方法是每右移一次,先将每个字符向右移一个位置。因为最后面的值是'\0',刚好可以直接赋值。这样做法会在第一个字符处多一个值,将这个值跟最后的数进行交换,然后将交换后的最后一个值变成'\0'。具体看代码,当然这种方法只适合不会用指针的新手,如果使用指针将会简单很多。只需要空出一个空地址,然后依次将值往后储存进去,就不多说了。
#include<stdio.h>
#include<string.h>void main()
{
char buf[]="abcdefjhjklmnopqrstwvuxyz";
printf("初始值为\n%s\n",buf);
int i=0,j=strlen(buf),k; // j的值是数组的空间长度
char temp;
int n;
printf("输入右移位数:\n");
scanf("%d",&n);
while(i<n) //移多少位就循环几次
{
k=j;
while(buf[0]!=buf[1]) //结束条件是刚好将第一个值右移完毕
{
buf[k]=buf[k-1]; //将每一位字符与后一项交换
k--;
}
buf[0]=buf[j];
buf[j]='\0'; //将多余的字符去掉
i++;
}
printf("位移%d后的值为\n%s\n",n,buf);
}