实现一个函数,可以左旋字符串中的k个字符。

来源:互联网 发布:为知笔记 vip 编辑:程序博客网 时间:2024/05/17 03:03

题目:实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
代码如下:
方法一:

#include<stdio.h>#include<stdlib.h>#include<assert.h>#pragma warning(disable:4996)static leftMoveCore(char *str, int len){    char tmp = str[0];    int i = 0;    for (; i<len - 1; i++)    {        str[i] = str[i + 1];    }    str[i] = tmp;}void leftMove(char*str, int len, int count){    assert(str);    assert(len>0);    assert(count>0);    count %= len;    while (count--)    {        leftMoveCore(str, len);    }}int main(){    int count = 0;    printf("please input a number:");    scanf("%d",&count);    char arr[] = "abcd1234";//不能写成*str    int len = sizeof(arr) / sizeof(arr[0])-1;    printf("before move:%s\n",arr);    leftMove(arr,len ,count);    printf("after move: %s\n",arr);    system("pause");    return 0;}

方法二:

#include<stdio.h>#include<stdlib.h>#include<assert.h>#pragma warning(disable:4996)static void reverseStr(char*start, char*end){    while (start < end)    {        *start ^= *end;        *end ^= *start;        *start ^= *end;        start++;        end--;    }}void leftMove(char*str, int len, int count){    assert(str);    assert(len>0);    assert(count > 0);    count %= len;    reverseStr(str, str + count - 1);    reverseStr(str + count, str + len - 1);    reverseStr(str, str + len - 1);}int main(){    int count = 0;    printf("please input a number:");    scanf("%d",&count);    char arr[] = "abcd1234";//不能写成*str    int len = sizeof(arr) / sizeof(arr[0])-1;    printf("before move:%s\n",arr);    leftMove(arr,len ,count);    printf("after move: %s\n",arr);    system("pause");    return 0;}

方法三:

#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#pragma warning(disable:4996)static void reverseStr(char*start, char*end){    while (start < end)    {        *start ^= *end;        *end ^= *start;        *start ^= *end;        start++;        end--;    }}void leftMove(char*str, int len, int count){    assert(str);    assert(len>0);    assert(count > 0);    count %= len;    int newsize = 2 * len + 1;    char*mem = (char*)malloc(sizeof(char)*newsize);    strcpy(mem,str);    strcat(mem,str);    strncpy(str,mem+count,len);    free(mem);}int main(){    int count = 0;    printf("please input a number:");    scanf("%d",&count);    char arr[] = "abcd1234";//不能写成*str    int len = sizeof(arr) / sizeof(arr[0])-1;    printf("before move:%s\n",arr);    leftMove(arr,len ,count);    printf("after move: %s\n",arr);    system("pause");    return 0;}
阅读全文
0 0
原创粉丝点击