字符串右移

Posted on 2021-07-29 22:57  辉仔猿  阅读(470)  评论(0编辑  收藏  举报

编写一个函数,要求输入一个字符串和要移动的位数n,使得该字符串能向右移动n位,输出移动后的字符串。例如:tomloveslily移动2位得lytomlovesli。

思路:把字符串变成两部分,交换位置,实际操作先把后n个字符保存起来,将strlen-n个字符往后移动n个位置,最后把n个字符放在前面(C语言)

void right_move(char* str,int n)
{
    int i;
    //临时分配一块内存,大小根据移动的位数决定
    char *temp= (char *)malloc(n*sizeof(char));
    int len = strlen(str);
    
    //给temp[]赋值为str[]后n位
    for(i=0;i<n;i++)
        temp[i]=str[len-n+i];
        
    //把字符串的前len-n右移n位
    for(i=0;i<len-n;i++)
        str[len-i-1]=str[len-i-1-n];
        
    //字符串前n为赋值
    for(i=0;i<n;i++)
        str[i]=temp[i];
}

全部代码(C语言)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void right_move(char *,int);

int main(void)
{
    int n;
    char str[30];
    //输入字符串string
    gets(str);
    //输入需要移动的n位
    scanf("%d",&n);
    puts(str);
    right(str,n);
    puts(str);
}

void right_move(char * str,int n)
{
    int i;
    char * temp = (char*)malloc(n*sizeof(char));
    int len=strlen(str);
    
    for(i=0;i<n;i++)
        temp = str[len-n+i];
        
    for(i=0;i<len-n;i++)
        str[len-i-1]=str[len-i-1-n];
        
    for(i=0;i<n;i++)
        str[i]=temp[i];
}