實現字串迴圈右移n 位與左移n位(建立陣列)
阿新 • • 發佈:2019-02-15
編寫一個函式,作用是把一個 char 組成的字串迴圈
右移 n 個。
比如原來是“abcdefghi”
如果 n=2,移位後應該是“hiabcdefgh”
左移n個
比如原來是“abcdefghi”
如果 n=2,移位後應該是“cdefghiab”函式頭是這樣的:
//pStr 是指向以'\0'結尾的字串的指標
//steps 是要求移動的 n
void LoopMove ( char * pStr, int steps )
{
//...
}
以下是對右移的分析
對於左移其實與右移相同
/**************************************** * File Name : loopMove.c * Creat Data : 2015.3.24 * Author : wk *****************************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> #define MAXLEN 20 void LoopMove1(char *str,int n) char *p=str; char temp[MAXLEN];//定義一個數組 int len=strlen(str); int remain=len-n;//記錄剩餘的的字串長度 strcpy(temp,str+remain); strcpy(temp+n,str); /*這是左移需要替換的程式碼 strcpy(temp,str+n); strcpy(temp+remain,str);*/ *(temp+len)='\0'; strcpy(p,temp); } void LoopMove2(char *pstr,int n) { int remain=strlen(pstr)-n; char temp[MAXLEN]; memcpy(temp,pstr+remain,n); memcpy(pstr+n,pstr,remain); memcpy(pstr,temp,n); /* 這是左移需要替換的程式碼 memcpy(temp,pstr+n,remain); memcpy(pstr+remain,pstr,n); memcpy(pstr,temp,remain);*/ } int main() { char pstr[]="abcdef"; int n=2; LoopMove1(pstr,n); printf("%s\n",pstr); char pstr2[]="abcdef"; LoopMove2(pstr2,n); printf("%s\n",pstr2); system("pause"); return 0; }