C语言字符串指针。。

声明一个字符串,长度与内容自定。从控制台输入一个整数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;

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632