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