[置顶] 【C语言】 左旋字符串
2016-05-26 12:24
344 查看
实现一个函数,可以左旋字符串中的k个字符 方法一:开辟另一个数组,先把第k+1后面的字符写入这个数组中,再把要左旋的k个字符写进去 (暴力求解法) 实现如下: #include<stdio.h> #include<assert.h> #include<string.h> void left_Relvove(char *str,char *arr,int k) { char *pcur = str+k; //先让指针从第k+1个字符开始,存进arr数组里 assert (str && arr); //断言 while(*pcur) //从第k+1个字符开始,遇到'\0'跳出 { *arr++ = *pcur++; } pcur = str; //把第k+1后面的字符写到arr中后,把指针调向str首元素,开始写入要旋转的k个字符 while(k) { *arr++ = *pcur++; k--; } *arr='\0'; } int main() { int k; char str[10] = {0}; char arr[10] = {0}; scanf("%d", &k); scanf("%s",str); left_Relvove(str,arr,k); printf("%s\n",arr); return 0; } 方法二:定义一个字符串翻转函数,把要左旋的k个字符先逆序翻转,再把k+1后的字符 逆序翻转,最后把整个字符串逆序翻转 (三步翻转法) 实现如下: #include<stdio.h> #include <string.h> void reserve(char *left,char*right) { while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } int main() { char arr[10] = "AABCD"; int len = strlen(arr)-1; int k = 0; char *pstart = &arr[0]; char *pend = arr+len; scanf("%d", &k); reserve(pstart, pstart + k -1); //把要左旋的k个字符先逆序翻转 reserve(pstart + k, pend); //把k+1后的字符逆序翻转 reserve(pstart, pend); //整个字符串逆序翻转 printf("%s\n", arr); system("pause"); return 0; }
本文出自 “Vs吕小布” 博客,请务必保留此出处http://survive.blog.51cto.com/10728490/1709777
相关文章推荐
- [置顶] 【C语言】 提取子字符串
- [置顶] 【C语言】 求一个数的二进制反转后的值
- [置顶] 【C语言】求两数二进制序列不同的位
- [置顶] 【C语言】 棋盘游戏
- [置顶] 【C语言】 数组的初始化、逆置、清空
- [置顶] 【C语言】 折半查找
- [置顶] 【C语言】 杀人凶手问题
- [置顶] 【C语言】 跳水比赛名次预测问题
- [置顶] 【C语言】杨辉三角
- [置顶] 【C语言】 猜数字游戏
- [置顶] 【C语言】 n个不同的数可组成多少个不同的三位数
- [置顶] 【C语言】求最大最小值
- [置顶] 【C语言】一分钟后关机
- [置顶] 【C语言】判断花括号{}是否匹配
- [置顶] 【C语言】求 a+aa+aaa+aaaa+aaaaa
- [置顶] 【C语言】模拟三次密码输入
- [置顶] 【C语言】输出字符串
- [置顶] 【C语言】输出一个整数的每一位
- [置顶] 【C语言】输出菱形星号图案
- [置顶] 【C语言】接收字符,大小写字符相互转换后输出,数字不输出