字符串循环右移动n位

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
using namespace std;
#define  MAX_LEN 256

//字符串循环右移动n位,如abcdefghi循环右移2位为hiabcdefg
//3种方法

void LoopMove(char *pStr, int steps)
{
	char *ptem = pStr;

	int len = 0;
	while(*ptem != '\0')
	{
		ptem++;
		len++;
	}

	if (steps%len == 0)
	{

	}
	else
	{
		int needmove = steps%len;
		for (int i=0; i<len-needmove; i++)
		{
			ptem[needmove+i] = pStr[i];
		}

		for (i=len-needmove; i<len; i++)
		{
			ptem[i-(len-needmove)] = pStr[i];
		}
	}

//	pStr = &ptem;
	for (int j=0; j<len; j++)
	{
		pStr[j] = ptem[j];
	}
	pStr[j] = '\0';
	
}




void LoopMove(char *pStr, int steps)
{
	int needmove =  steps%strlen(pStr);
	int pos = strlen(pStr)-needmove;//尾部待移动的起始位置
	char temp[MAX_LEN];
	memset(temp, 0, MAX_LEN*sizeof(char));

	strcpy(temp, pStr+pos);
	strcpy(temp+needmove, pStr);
	temp[strlen(pStr)] = '\0';
	strcpy(pStr, temp);
}


void LoopMove(char *pStr, int steps)
{
	int needmove = steps%strlen(pStr);
	int pos		 = strlen(pStr) - needmove;
	char temp[MAX_LEN];
	memset(temp, 0, MAX_LEN*sizeof(char));

	memcpy(temp, pStr+pos, needmove);
	memcpy(temp+needmove, pStr, strlen(pStr)-needmove);
	memcpy(pStr, temp, strlen(pStr));
}



int main()
{
	char str[] = "abcdefghi";
	int steps = 11;
	cout << "Before" << endl;
	cout << str << endl;
	LoopMove(str, steps);
	cout << "After" << endl;
	cout << str << endl;
	
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值