【旋转字符】C语言

简介: 【旋转字符】C语言

之前看到过一个很有意思的一个题目,和大家分享一下。


题目是这样的,实现一个函数,要求是左旋字符串的k个字符


这里我想到了两种简单的方法


第一种方法是每次旋转一个字符,把这个动作执行k次


首先创建一个字符串(随机)为     char arr[]="abcdefghi";


这里先以k=1为例;


上图

7682bfaf4bf3a4322f44a00212b870b7_08060f4ebe8141568584cb8ea3192894.png

完整代码如下:

void left_move(char arr[], int k)
{
  //每一次只旋转一个字符,把这个动作执行K次
  int i = 0;
  int len = strlen(arr);
  k %= len;
  for (i = 0; i < k; i++)
  {
    //1
    char tmp = arr[0];
    //2 把后边的字符全部往前挪动一个位置
    int j = 0;
    for (j = 0; j < len - 1; j++)
    {
      arr[j] = arr[j + 1];
    }
    //3 
    arr[len - 1] = tmp;
  }
}
int main()
{
  char arr[] = "abcdefghi";
  int k = 0;
  scanf("%d", &k);
  left_move(arr, k);
  printf("%s\n", arr);
  return 0;
}

这里的k%=len;是怕给定的k值太大


第二种方法是散步翻转法

上图

6a39b934ff1fbf8ff3e77b59f2f4fc05_18fd03e34fa74d748e07eb1a99ee3988.png

完整代码如下:

void reverse(char*left, char*right)
{
  assert(left && right);   //防止指针为空
  while (left < right)
  {
    char tmp = *left;
    *left = *right;
    *right = tmp;
    left++;
    right--;
  }
void left_move(char arr[], int k)
{
  //每一次只旋转一个字符,把这个动作执行K次
  int i = 0;
  int len = strlen(arr);
  k %= len;
  reverse(arr, arr+k-1);
  reverse(arr+k, arr + len - 1);
  reverse(arr, arr + len - 1);
}
int main()
{
  char arr[] = "abcdefghi";
  int k = 0;
  scanf("%d", &k);
  left_move(arr, k);
  printf("%s\n", arr);
  return 0;
}

3bcec2ff8185543e166ce99b7c3cd274_3a786f63b12c4089998480e21b668273.png这个如果看不懂,可以结合图看一下。

相关文章
|
1天前
|
C语言 C++
C语言利用ASCII码表统计字符串每个字符出现的次数
C语言利用ASCII码表统计字符串每个字符出现的次数
5 0
|
1天前
|
C语言
C语言:字符函数和字符串函数(strlen strcat strcmp strncmp等函数和模拟实现)
C语言:字符函数和字符串函数(strlen strcat strcmp strncmp等函数和模拟实现)
|
23天前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现1
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
1月前
|
C语言
C语言第二十五弹---字符函数和字符串函数(上)
C语言第二十五弹---字符函数和字符串函数(上)
|
1月前
|
C语言
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
28 0
|
1月前
|
存储 Serverless C语言
C语言——字符数组
C语言——字符数组
16 0
|
1月前
|
C语言
【C语言进阶】字符函数和内存函数(二)
【C语言进阶】字符函数和内存函数(二)
|
1月前
|
C语言 C++
【C语言进阶】字符函数和内存函数 (一)
【C语言进阶】字符函数和内存函数 (一)
|
1月前
|
C语言
C语言字符输入函数
C语言字符输入函数
8 0
|
1月前
|
存储 C语言
C语言字符输出函数
C语言字符输出函数
12 0