【C语言】字符串左旋k次的3种做法
2016-11-13 00:16
260 查看
左旋字符串k次的3种方法
1.循环移动法
2.交换法
3.双重字符法
1.循环移动法
**a[0]与最后一个元素交换,其他的每个元素均向前移动一位,循环n次就可以达到目的。
2.交换法
**核心部分
reverse(start, middle);
reverse(middle+1, end);
reverse(start, end);
3.双重字符法
**重新分配内存 包含循环每一种情况
**指针直接指向
注意:使用动态分配内存的时候,一定要释放内存。:
free(buf);
buf = NULL;
1.循环移动法
2.交换法
3.双重字符法
1.循环移动法
**a[0]与最后一个元素交换,其他的每个元素均向前移动一位,循环n次就可以达到目的。
#include<stdio.h> #include<string.h> #include<assert.h> #include<windows.h> void strshift(char *str, int len, int step); int main() { char str[] = "abcd1234"; char src[] = "1234abce"; int len = strlen(str); printf("please enter: "); int k = 0; scanf_s("%d", &k); printf("before: %s\n", str); strshift(str, len, k); printf("after: %s\n", str); system("pause"); return 0; } void strshift(char *str, int len, int step) { assert(str); assert(len > 0); step %= len; int i = 0; for (; i < step; i++){ char tmp = str[0]; int j = 0; for (; j < len - 1; j++){ str[j] = str[j + 1]; } str[j] = tmp; } }
2.交换法
**核心部分
reverse(start, middle);
reverse(middle+1, end);
reverse(start, end);
#include<stdio.h> #include<string.h> #include<assert.h> #include<windows.h> void swap(char *x, char *y); void reverse(char *start, char *end); void strshift(char *str, int len, int step); int main() { char str[] = "abcd1234"; char src[] = "1234abce"; int len = strlen(str); printf("please enter: "); int k = 0; scanf_s("%d", &k); printf("before: %s\n", str); strshift(str, len, k); printf("after: %s\n", str); system("pause"); return 0; } void swap(char *x, char *y) { *x ^= *y; *y ^= *x; *x ^= *y; } void reverse(char *start, char *end) { assert(start); assert(end); while (start < end){ swap(start, end); start++, end--; } } void strshift(char *str, int len, int step) { assert(str); assert(len > 0); step %= len; char* start = str; char* middle = str + step - 1; char* end = str + len - 1; reverse(start, middle); reverse(middle+1, end); reverse(start, end); }
3.双重字符法
**重新分配内存 包含循环每一种情况
**指针直接指向
注意:使用动态分配内存的时候,一定要释放内存。:
free(buf);
buf = NULL;
void strshift(char* str, int len, int step) { assert(str); assert(len>0); step %= len; char* buf = (char*)malloc(sizeof(char)*len*2+1); strcpy(buf, str); strcat(buf, str); strncpy(str, buf+step, len); free(buf); buf = NULL; }
相关文章推荐
- c语言输出字符串中最大对称子串长度的3种解决方案
- C语言实现左旋字符串
- C语言实现-字符串左旋
- 可以将一个字符串左旋K个字符(0<=k<=字符串长度)的三种函数写法【C语言】
- 【C语言】实现一个函数,可以左旋字符串中的K个字符
- 【C语言学习笔记】字符串拼接的3种方法
- C语言三种方法实现字符串左旋
- 【C语言】实现一个函数,可以左旋字符串中的k个字符。
- 【C语言】【笔试题】【面试题】实现一个函数,可以左旋字符串中的k个字符
- 左旋字符串的做法
- 【C语言】 左旋字符串
- C语言:将一个字符串左旋任意(K)个字符
- C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)
- 【C语言学习笔记】字符串拼接的3种方法 .
- C语言--左旋字符串中的K个字符
- 【C语言】【笔试题】【面试题】实现一个函数,可以左旋字符串中的k个字符
- c语言左旋字符串中的k个字符
- C语言之——左旋字符串
- C语言:编写一个函数实现一串字符串的左旋或者右旋
- C语言:判断一个字符串是否为另外一个字符串旋转之后的字符串。(左旋右旋、求子串)