【C语言】 左旋字符串

来源:互联网 发布:淘宝违规申诉包过 编辑:程序博客网 时间:2024/04/28 15:00
实现一个函数,可以左旋字符串中的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

0 0
原创粉丝点击