实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB

原创 2018年04月15日 16:18:09

方法1.采用循环移位,对需要旋转的k个字符按顺序进行旋转,先将要旋转的一个字符保存起来,将后面的往前挪动一位,再将保存起来的这个字符赋给最后一位,这样连续循环k次

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void left_remove(char *p, int n, int len)
{
    int i;
    for (i = 0; i < n; i++)
    {
        int j = 0;
        char tmp = p[0];
        for (j = 0; j < len; j++)
        {
            p[j] = p[j + 1];
        }
        p[len - 1] = tmp;
    }
}
int main()
{
    char arr[] = "abcdef";
    int n;
    int len = strlen(arr);
    printf("旋转前:%s\n", arr);
    printf("旋转几位:");
    scanf("%d", &n);
    while (n < 1 || n > len - 1)//对于输入旋转字符数的临界值判断,是否超过字符串长度
    {
        if (n == len)//旋转字符数为字符串长度时,旋转后的字符串与旋转前的字符串一致,所以可直接输出
        {
            printf("%s", arr);
            system("pause");
            return 0;
        }
        else
        {
            printf("输入错误\n");
            scanf("%d", &n);
        }
    }
    left_remove(arr, n, len);//函数用以完成旋转字符的功能
    printf("旋转后: %s\n", arr);
    system("pause");
    return 0;
}

方法2.三步旋转法,先将要旋转的k个字符串逆序,再将剩余的字符串逆序,最后再对整个字符串逆序就得到了旋转k个字符后的字符串

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void reserve(char *left, char *right)
{
    while (left < right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}

void left_remove(char *p, int n,int len)
{
    reserve(p, p + n - 1);
    reserve(p + n, p + len - 1);
    reserve(p, p + len - 1);
}

int main()
{
    char arr[] = "abcdef";
    int n;
    int len = strlen(arr);
    printf("旋转前:%s\n", arr);
    printf("旋转几位:");
    scanf("%d", &n);
    while (n < 1 || n > len - 1)//对于输入旋转字符数的临界值判断,是否超过字符串长度
    {
        if (n == len)//旋转字符数为字符串长度时,旋转后的字符串与旋转前的字符串一致,所以可直接输出
        {
            printf("%s\n", arr);
            system("pause");
            return 0;
        }
        else
        {
            printf("输入错误,请重新输入\n");
            scanf("%d", &n);
        }
    }
    left_remove(arr, n, len);//函数用以完成旋转字符的功能
    printf("旋转后:%s\n", arr);
    system("pause");
    return 0;
}

方法3.指针

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void left_remove(char arr[], int n)     //spin函数用以完成旋转字符的功能
{
    char arr1[5] = { 0 };
    char *mov1 = arr;        //创建两个指针都指向原字符数组的首地址
    char *mov2 = arr;
    char *res1 = arr1;       //同理创建两个指向接受旋转字符的数组的首地址
    char *res2 = arr1;
    while (n--)         //num为输入的旋转字符数,用以结束while循环
    {
        *res1++ = *mov2++;//从首地址依次将字符拷贝到接受字符数组当中,拷贝次数为输入的旋转字符数
    }
    while (*mov2)  //将拷贝完成最后一次字符后的字符串依次向前与空白替换,直到遇到原字符串的‘\0’时结束循环
    {
        *mov1++ = *mov2++;
    }
    while (*mov1)  //将存放旋转字符数组中的字符依次填充到向前与空格替换后剩余字符串的末尾处
    {
        *mov1++ = *res2++;
    }
    *mov1 = '\0';        //填充时指针遇到‘\0’时结束
}


int main()
{
    int n;
    char arr[] = "AABCD";
    int len = strlen(arr);
    printf("原字符串:%s\n", arr);
    printf("请输入旋转的字符数:");
    scanf("%d", &n);
    while (n < 1 || n > len - 1)     //对于输入旋转字符数的临界值的判断
    {
        if (n == 5)    //旋转字符数为5时,旋转后的字符串与旋转前的字符串一致,所以可直接输出
        {
            printf("%s\n", arr);
            system("pause");
            return 0;
        }
        else
        {
            printf("输入有误,重新输入!");
            scanf("%d", &n);
        }
    }
    left_remove(arr, n);
    printf("现字符串:%s\n", arr);
    system("pause");
    return 0;
}

实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB

#include #include void left_move(char *p, int num) { int i = 0; for (i = 0; i < num; i...
  • lhy553529
  • lhy553529
  • 2017-01-05 16:17:58
  • 219

1.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB

1.实现一个函数,可以左旋字符串中的k个字符。  ABCD左旋一个字符得到BCDA  ABCD左旋两个字符得到CDAB 方法1 将字符串第一个的字符先复制一份,然后依次将字符串向左移动一位...
  • zlb1051
  • zlb1051
  • 2017-11-05 22:18:29
  • 205

.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA

1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 方法一: 算法思想:用移的步数作为while循环条件(每移1位完了减...
  • lyl194458
  • lyl194458
  • 2016-12-11 16:17:08
  • 343

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

实现一个函数,可以左旋字符串中的k个字符例如:AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAA方法(1):采用循环移位,对需要旋转的k个字符按顺序进行旋转,先将要旋转的一个字符...
  • Stand__out
  • Stand__out
  • 2016-06-02 10:45:02
  • 675

实现一个函数,可以左旋字符串中的k个字符.ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB

实现一个函数,可以左旋字符串中的k个字符.ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB...
  • triorwy
  • triorwy
  • 2018-02-20 18:04:22
  • 60

实现一个函数,可以左旋字符串中K个字符

实现一个函数,可以左旋字符串中K个字符 例如 abcdefgh 左旋2个字符  cdefghab 利用3次旋转达到我们的目的  首先把要旋转的K个字符逆序得到bacdefgh 然后把剩余的字符...
  • Cell_KEY
  • Cell_KEY
  • 2016-04-18 20:56:44
  • 206

40、左旋转字符串

题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部,请定义一个函数实现字符串左旋转的功能。比如输入:&quot;abcdefg&quot;和数字2. 输出“cdefgab”。解法:标...
  • qq_34650169
  • qq_34650169
  • 2018-04-02 09:40:53
  • 9

左旋字符串的三种实现

左旋字符串是许多公司面试官喜欢问到的问题,那么这片博文就是要讲一下左旋字符串的实现以及《剑指offer》里面是怎样解决这个问题。    一.先看看一道面试题    eg:输入一个英语句子,翻转句子中单...
  • litter_driver777
  • litter_driver777
  • 2016-06-11 14:05:31
  • 418

1.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA

#define _CRT_SECURE_NO_WARNINGS 1 #include void left_move(char *p, int n) { int i = 0; for (i = 0;...
  • qq_39947431
  • qq_39947431
  • 2017-11-04 17:27:31
  • 199

//3.实现一个函数,可以左旋字符串中的k个字符。 //ABCD左旋一个字符得到BCDA //ABCD左旋两个字符得到CDAB

#include #include int move(char arr[5],int sz,int k) { while (k) { int i = 0; int temp = arr[...
  • lxp_mujinhuakai
  • lxp_mujinhuakai
  • 2017-01-12 16:22:44
  • 110
收藏助手
不良信息举报
您举报文章:实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
举报原因:
原因补充:

(最多只允许输入30个字)