C语言-创新互联
                                            在以前我写过类似问题的博客,是倒置单词http://t.csdn.cn/rqhRL

目录
一、问题描述
二、分析与设计
三、代码实现
一、问题描述
实现一个函数,可以左旋字符串中的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://www.scyingshan.cn/article/poedg.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 