编写一个函数,要求输入一个字符串和要移动的位数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]; }