C/C++ 字符串操作1---字符串移位(出自《程序员面试宝典》)
题目:编写一个程序,作用是把一个char组成的字符串循环右移n位。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void loopmove1(char *str,int n);
void loopmove2(char *str,int n);
void loopmove3(char *str,int n);
void main(){
char str[1024];
int n;
scanf("%s%d",str,&n);
loopmove3(str,n);
printf("%s\n",str);
}
/*strcpy*/
void loopmove1(char *str,int n){
int len=strlen(str);
int m=len-n;
char *temp=(char *)calloc(len+1,sizeof(char));
if(temp==NULL)
exit(1);
strcpy(temp,str+m);
strcpy(temp+n,str);
*(temp+len)='\0';
strcpy(str,temp);
}
/*strncpy*/
void loopmove2(char *str,int n){
int len =strlen(str);
int m=len-n;
char *temp=(char *)calloc(len+1,sizeof(char));
if(temp==NULL)
exit(1);
strncpy(temp,str+m,n);
strncpy(temp+n,str,m);
*(temp+len)='\0';
strncpy(str,temp,len+1);
}
/*memcpy*/
void loopmove3(char *str,int n){
int len =strlen(str);
int m=len-n;
char *temp=(char *)calloc(len+1,sizeof(char));
if(temp==NULL)
exit(1);
memcpy(temp,str+m,n);
memcpy(temp+n,str,m);
*(temp+len)='\0';
memcpy(str,temp,len+1);
}
运行结果: