声明一个字符串,长度与内容自定。从控制台输入一个整数N,如果N大于零,则对字符串循环左移N位;如果N小于零,则对字符串循环右移N位。要求:1) 不允许通过字符数组的数组下标实现移动;2) 必须先移动再输出,不允许通过调整输出顺序实现移动;3) 实现移动所使用的辅助存储空间不大于1个字符变量。4) 分别输出移动前和移动后的字符串。源代码命名为sy2_2.c。
封装一个左移一位的函数,以及一个右移一位的函数。然后要求移动几位,就调用几次
#include<stdio.h>
#include <string.h>
void moveright(char *s,int n)
{
char c = *(s+n-1),t;
int i;
for(i=n-1;i>0;i--)
{
*(s+i) = *(s+i-1);
}
*s = c;
}
void moveleft(char *s,int n)
{
char c = *s,t;
int i;
for(i=0;i<n-1;i++)
{
*(s+i) = *(s+i+1);
}
*(s+n-1) = c;
}
int main()
{
char s[1000];
int len,i,n;
gets(s);
len = strlen(s);
scanf("%d",&n);
printf("%s\n",s);
if(n>0)
{
for(i=0;i<n;i++)
moveright(s,len);
}
else if(n<0)
{
for(i=0;i<-n;i++)
moveleft(s,len);
}
printf("%s",s);
return 0;
}
这个是要用指针的替换开完成,
申明的字符串名称s,s就是它的首字母代表的指针,
定义一个空的指针产量用来替换字符串中字符顺序,temp
开始循环,循环次数是n的绝对值,
循环体,所有字母移动,先将s赋给temp,*s=*s+1;*s+1=*temp;