C语言-创新互联

在以前我写过类似问题的博客,是倒置单词http://t.csdn.cn/rqhRL

创新互联建站主要从事成都网站建设、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务确山,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

目录

一、问题描述

二、分析与设计

三、代码实现


一、问题描述

实现一个函数,可以左旋字符串中的k个字符。

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB

二、分析与设计

按照常规思路,逆序第一步就是先把第一个字符取出,然后把后边的字符向前移动,接着把第一个字符放到\0之前。然后继续进行,知道逆序完成最后一个字符,结束逆序。

但是,很显然这不算最好的方法。

更好的方法如下:

首先逆序前k个字符,然后逆序剩下的字符,最后把所有除了\0之外的字符逆序。

例如,在字符串abcdef中逆序前两个字符,那么就要先把ab逆序成ba,然后把cdef逆序成fedc,最后整体逆序成cdefab:

三、代码实现
#include 
void reverse(char* left, char* right)
{
	assert(left);
	assert(right);
	while (left< right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
void left_move(char arr[], int k)
{
	int len = strlen(arr);
	k %= len;
	//逆序左
	reverse(arr, arr + k - 1);
	//逆序右
	reverse(arr + k, arr + len - 1);
	//逆序整体
	reverse(arr, arr + len - 1);
}
int main()
{
	char arr[] = "abcdef";
	int k = 8;
	left_move(arr, k);
	printf("%s\n", arr);
	return 0;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


标题名称:C语言-创新互联
标题来源:http://scyanting.com/article/poedg.html