字符串左旋

简介: 字符串左旋

描述


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


       例如:ABCD左旋一个字符得到BCDA


                  ABCD左旋两个字符得到CDAB


方法一:设a=k%strlen(str),str为字符串变量,k为旋转次数,将str首元素开始a个元素后的每个元素向前移动一再将已存起的首元素放置str尾部,如此进行a次。

5bca675fd1e74280adc1b6b50b05d566.png


#include <stdio.h>
#include<string.h>
#include <assert.h>
//左旋
void LeftRotate(char* str, int len, int num)
{
  assert(str);
  assert(len);
  assert(num);
    num%=len;
  while (num) 
    {
    char temp = str[0];
    int i = 0;
    for (; i < len-1; i++)
    {
      str[i] = str[i + 1];
    }
    str[i] = temp;
    num--;
  }
}
int main()
{
  char str[] = "abcd1234";
  int len = strlen(str);
  int num = 0;
  printf("请输入左旋的次数:");
  scanf("%d", &num);
  printf("before: %s\n", str);
  LeftRotate(str, len, num);
  printf("after : %s\n", str);
  return 0;
}


方法二:设a=k%strlen(str),str为字符串变量,k为旋转次数,将str首元素开始a个元素为一组(左组),剩余元素为一组(右组),将左组进行逆序排列,再将组进行逆序排列,最后再整体逆序排列。  

e1d757390933414d9961866c9e5c27c8.png


#include<stdio.h>
#include<string.h>
void LeftRotate(char*a,int num)
{
  int len = strlen(a);
  //左逆序
  reverse(a,a+num-1);
  //右逆序
  reverse(a+num,a+len-1);
  //整体逆序
  reverse(a, a + len - 1);
}
int main()
{
  char a[] = "abcdef";
  int num=0;
  scanf("%d", &num);
  int len = strlen(a);
  num %= len;
  LeftRotate(a,num);
  printf("%s", a);
  return 0;
}

9dd17643289647deb906b475d7795e75.png


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


目录
相关文章
|
2月前
|
C语言
C语言--左旋字符/右旋字符实现及其判断
C语言--左旋字符/右旋字符实现及其判断
23 0
|
2月前
|
C语言
字符旋转及逆序输出问题
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1 给定s1=abcd和s2=ACBD,返回0.
|
10天前
《剑指offer》--字符串左旋
《剑指offer》--字符串左旋
8 0
|
2月前
L1-050 倒数第N个字符串
L1-050 倒数第N个字符串
17 0
|
8月前
|
算法 程序员
倒置字符串
倒置字符串
|
9月前
|
C语言
字符串的左旋和判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言实现)
字符串的左旋和判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言实现)
|
12月前
字符串左旋
字符串左旋
25 0
|
12月前
杨氏矩阵,字符串左旋,字符串旋转结果题目解析
杨氏矩阵,字符串左旋,字符串旋转结果题目解析
每日一题——左旋转的字符串
每日一题——左旋转的字符串

热门文章

最新文章