实现一个函数,可以左旋字符串中的k个字符
来源:互联网 发布:离开雷锋的日子 知乎 编辑:程序博客网 时间:2024/05/29 03:07
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
以下通过三种方法来实现:
//方法一//将字符串除第一个字符外的所有字符左移,再将第一个字符放置最后一位,操作N次static leftmove(char *str, int len){ char tmp = str[0]; int i = 0; for (i = 0; i < len - 1; i++) { str[i] = str[i + 1]; } str[i] = tmp;}void left_reverse(char *str, int len, int n){ assert(str); assert(len>0); assert(n>0); n %= len; while (n--) { leftmove(str, len); }}
//方法二//以n为界,将字符串分成两部分,先分别逆置,再整体逆置static void reverse_string(char *start, char *end){ assert(start); assert(end); while (start < end) { *start ^= *end; *end ^= *start; *start ^= *end; start++; end--; }}void left_reverse1( char *str,int len, int n){ assert(str); assert(len > 0); assert(n > 0); n %= len; reverse_string(str, str + n - 1); reverse_string(str + n, str + len - 1); reverse_string(str, str + len - 1);}
//方法三//将两字符串拼接在一起,利用子串查找找到左旋后的字符串void left_reverse2(char *str, int len, int n){ assert(str); assert(len > 0); assert(n > 0); n %= len; int newsize = 2 * len + 1; char *mem = (char *)malloc(sizeof(char)*newsize);//开辟内存 strcpy(mem, str);//将字符串str拷贝到mem中 strcat(mem, str);//再将字符串str拼接在mem上 strncpy(str, mem+n, len);//在mem中从n个字符开始拷贝和原先str字符串长度相等个字符到str上 free(mem);//释放内存}
测试用例:
int main(){ char str[] = "abcd"; int n = 0; int sz = sizeof(str) / sizeof(str[0])-1; printf("please input left_reverse num:"); scanf("%d", &n); left_reverse2(str, sz, n); printf("%s", str); return 0;}
要判断一个字符串是否为另一个字符串左旋后的字符串,我们采用刚刚代码三的方法,代码如下:
#include <stdio.h>#include <assert.h>#include <string.h>int find_leftmove(char *str, char *substr){ assert(str); assert(substr); int len1 = strlen(str); int len2 = strlen(substr); if (len1 != len2) { return -1;//若两字符串长度不等,直接返回-1 } int newsize = len1 * 2 + 1; char *mem = (char *)malloc(sizeof(char)*newsize); strcpy(mem, str); strcat(mem, str); if (strstr(mem, substr)) { return 1;//若在mem中能够查找到所要求的字符串,即它是左旋后的字符串,返回1 } free(mem);}int main(){ char str[] = "abcdef"; int ret = find_leftmove(str, "bcdefa"); if(ret==1) { printf("Yes!\n"); } else { printf("No\n"); } return 0;}
阅读全文
0 0
- 1.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA
- C语言:实现一个函数,可以左旋字符串中的k个字符。
- 实现一个函数,可以左旋字符串中的k个字符
- 实现一个函数,可以左旋字符串中的k个字符
- 实现一个函数,可以左旋字符串中的k个字符
- 实现一个函数,可以左旋字符串中的k个字符(不同复杂度的算法)
- 【C语言】实现一个函数,可以左旋字符串中的k个字符。
- 实现一个函数,可以左旋字符串中的k个字符
- 编写一个函数,可以实现左旋字符串中的k个字符。
- .实现一个函数,可以左旋字符串中的k个字符。
- 实现一个函数,可以左旋字符串中的k个字符
- 【Ex.】实现一个函数,可以左旋字符串中的k个字符
- 实现一个函数,可以左旋字符串中的k个字符。(三种方法)
- 实现一个函数,可以左旋字符串中的k个字符。
- 实现一个函数,可以左旋字符串中的k个字符。
- 三种方法实现一个函数,可以左旋字符串中的k个字符
- 实现一个函数,可以左旋字符串中的k个字符。
- 实现一个函数,可以左旋字符串中的k个字符
- 设计模式(5)-代理(Proxy)模式和装饰(Decorator)模式
- 后台小白:stuManager代码使用学习
- 何在 Android 程序中禁止屏幕旋转和重启Activity
- 正则化方法:L1和L2 regularization、数据集扩增、dropout
- AttributeError: module 'tensorflow.python.ops.nn' has no attribute 'seq2seq'
- 实现一个函数,可以左旋字符串中的k个字符
- 习题6.10
- Java程序设计(Java9版):第2章 数据类型与运算符(Data types and Operators)
- HDU1754线段树求取区间最大值
- [Android]通过ViewDragHelper实现滑动关闭Activity
- 浅谈几种服务器端模型——多进程并发式
- 发文测试
- gzip,tar,bzip,xz
- log4j 记录日志,数据插入到数据库