左旋字符
来源:互联网 发布:ubuntu wine qq2016 编辑:程序博客网 时间:2024/05/01 15:20
问题描述:
实现一个函数,可以左旋字符串中的k个字符。
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
法一:通过移动字符实现左旋
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<windows.h>char *leftstring(char *str, int num,int len){char arr[10];char *p = str,*q = str;int i = 0;for (i = 0; i < num; i++) //比如我们需要左旋两个字符串,那么先把原字符串的最前面的两个字符存起来{arr[i] = *p++;}p = str;p += num; //用p指向需要前移的第一个字符for (i = num; i < len-1; i++) //从第一个字符开始依次把后面的字符前移,做前移操作,i控制次数{*str++ = *p++;}for (i = 0; i < num; i++) //把刚刚取出来的字符,存到原字符串前移后的后面{*str++ = arr[i];}return q;}int main(){char arr[] = "AABCD";int len = sizeof(arr) / sizeof(arr[0]);leftstring(arr, 2, len);printf("%s\n",arr);system("pause");return 0;}
法二:通过置换函数进行左旋操作
比如abcd1234,如果我们想左旋四个,我们可以先把前面四个逆序得到dcba,接着把后面逆序得到4321,这样两次逆序后的结果是dcba4321,然后再整体逆序,得到了1234abcd,同样的方法大家可以试一下左旋两个是不是同样的效果
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<assert.h>#include<windows.h>//通过置换函数进行左旋操作void swap(char *p, char *q) //置换两个字符{assert(p); //每次传入一个地址时进行断言,防止传址出错assert(q);*p ^= *q;*q ^= *p;*p ^= *q;}char *ReverseOrder(char *left, char *right) //置换一组字符{assert(left);assert(right);char *arr = left;while (arr < right){swap(arr, right);arr++, right--;}return left;}char *leftstring(char *str, int num,int len) //通过前后字符替换实现左旋{assert(str);char *string = str; num = num % len; //加上一个取余的操作,目的是如果左旋的次数大于字符串的长度,比如该题如果是9,实际的结果只左旋了一次ReverseOrder(string, string + num - 1); //先置换前一部分,再置换后一部分,然后整体置换ReverseOrder(string + num, string + len - 1);ReverseOrder(string, string + len - 1);return str;}int main(){char arr[] = "abcd1234";int len = (sizeof(arr) / sizeof(arr[0])) - 1;leftstring(arr, 2, len);printf("%s\n",arr);system("pause");return 0;}
法三:通过在拼接进行左旋,把和原字符串同样内容的字符串拼接在原字符串的后面
分析如下,如果我们的原字符串是abcd1234,现在我左旋2,想要得到的结果是cd1234ab,我使用本方法是在原字符串的后面拼接一整个,得到abcd1234abcd1234,然后从第三个字符开始把内容依次复制到原字符串中去,循环的次数是8.
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<assert.h>#include<windows.h>#include<string.h>//通过在拼接进行左旋,把和原字符串同样内容的字符串拼接在原字符串的后面char *leftstring(char *str, int num, int len){assert(str);int i = 0;char *string = str;char *arr = (char *)malloc(2*len + 1); //开辟空间使2*len+1,其中+1位为了给结尾处留有一个'\0'的空间num = num % len;strcpy(arr,string);strcat(arr,string);for (i = 0; i < len; i++){*string++ = arr[i+num];}return str;}int main(){char arr[] = "abcd1234";int len = (sizeof(arr) / sizeof(arr[0])) - 1;leftstring(arr, 2, len);printf("%s\n",arr);system("pause");return 0;}
0 0
- 字符左旋函数
- 左旋字符
- 字符的左旋
- 左旋字符串k个字符
- 左旋字符串中的k个字符
- 左移字符
- 左旋转字符窜
- .实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA
- 实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
- //3.实现一个函数,可以左旋字符串中的k个字符。 //ABCD左旋一个字符得到BCDA //ABCD左旋两个字符得到CDAB
- 实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
- 实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA
- 实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
- 1.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
- 实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
- 将一个字符串,左旋N个字符
- c::如何左旋一个字符串中的k个字符~
- 【字符串】旋转字符串(左旋或右旋k个字符)
- Bzoj4016
- 【工具】用PPT排版打印海报时图片分辨率问题
- Android App游戏去广告
- UFLDL Exercise: Convolution and Pooling
- [网易博客]Git 分支管理策略
- 左旋字符
- phpStrom 配置xdebug php 调试
- React组件规范和生命周期
- shell if test
- 博客转移
- AngularJS—理解AngularMVC模式
- Web服务请求异步化介绍
- 数据结构实验之查找七:线性之哈希表
- * Hopscotch