实现字符串循环右移n 位与左移n位(建立数组)
2015-03-24 12:41
344 查看
编写一个函数,作用是把一个 char 组成的字符串循环
右移 n 个。
比如原来是“abcdefghi”
如果 n=2,移位后应该是“hiabcdefgh”
左移n个
比如原来是“abcdefghi”
如果 n=2,移位后应该是“cdefghiab”
函数头是这样的:
//pStr 是指向以'\0'结尾的字符串的指针
//steps 是要求移动的 n
void LoopMove ( char * pStr, int steps )
{
//...
}
以下是对右移的分析
对于左移其实与右移相同
右移 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; }
相关文章推荐
- 实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
- 实现字符串循环右移n 位与左移n位(不建立数组,直接用指针)
- 实现指定步长循环后移字符串数组算法
- php中循环实现(字符串,对象,或者数组)编码相互转换
- 实现指定步长循环后移字符串数组算法
- java里如何实现循环打印出字符串或字符串数组里的内容
- javascript中利用数组实现的循环队列代码
- 【算法】实现对中文字符串数组按照音序排列
- Java为其for循环实现了针对数组和集合类的新用法
- VC++中按特定标志字符实现字符串到字符串数组的分割(CString -> Cstring[])
- 用C#编程语言实现数据结构传递整型变量、字符串和数组的方法
- 循环队列的数组表示函数的实现
- 合并字符串数组的实现
- deque源代码循环数组实现
- Java数组实现循环队列
- Java数组实现循环队列
- 利用循环数组实现的队列
- SQL 中传数组参数的变通方法:通过字符串分拆实现
- 用循环数组实现队列
- 循环队列的数组表示函数的实现