字符串左旋

简介: 字符串左旋

描述


       实现一个函数,可以左旋字符串中的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
|
6月前
|
C语言
字符旋转及逆序输出问题
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1 给定s1=abcd和s2=ACBD,返回0.
|
8天前
|
Python
递归魔法:判断字符串是否为回文
本文介绍了如何使用递归判断一个字符串是否是回文。回文字符串是指正读和反读都相同的字符串。文章详细讲解了递归的基本思想和Python实现,并通过多个示例验证了函数的正确性。递归方法通过将大问题分解成更小的子问题,使得判断回文变得简单高效。
|
2月前
|
存储 算法 索引
给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。如何解答呢?
给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。如何解答呢?
|
4月前
|
API
用栈翻转字符串
用栈翻转字符串
27 0
|
5月前
《剑指offer》--字符串左旋
《剑指offer》--字符串左旋
25 0
|
C语言
字符串的左旋和判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言实现)
字符串的左旋和判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言实现)
字符串左旋
字符串左旋
33 0
杨氏矩阵,字符串左旋,字符串旋转结果题目解析
杨氏矩阵,字符串左旋,字符串旋转结果题目解析