字符串左旋

简介: 字符串左旋

描述


       实现一个函数,可以左旋字符串中的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++;
  }
}


目录
相关文章
|
6月前
|
C语言
C语言--左旋字符/右旋字符实现及其判断
C语言--左旋字符/右旋字符实现及其判断
31 0
|
2月前
|
存储 算法 索引
给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。如何解答呢?
给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。如何解答呢?
|
4月前
|
API
用栈翻转字符串
用栈翻转字符串
26 0
|
5月前
《剑指offer》--字符串左旋
《剑指offer》--字符串左旋
25 0
|
6月前
L1-050 倒数第N个字符串
L1-050 倒数第N个字符串
25 0
|
C语言
字符串的左旋和判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言实现)
字符串的左旋和判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言实现)
字符串左旋
字符串左旋
33 0
杨氏矩阵,字符串左旋,字符串旋转结果题目解析
杨氏矩阵,字符串左旋,字符串旋转结果题目解析
逆置字符串
逆置字符串
61 0