【旋转字符】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语言程序至关重要。
180 11
|
1月前
|
存储 C语言 开发者
【C语言】格式化输出占位符及其标志字符详解(基于ISO/IEC 9899:2024)
在C语言中,格式化输出通过 `printf` 函数等格式化输出函数来实现。格式说明符(占位符)定义了数据的输出方式,标准ISO/IEC 9899:2024(C23)对这些格式说明符进行了详细规定。本文将详细讲解格式说明符的组成部分,包括标志字符、宽度、精度、长度修饰符和类型字符,并适当增加表格说明。
44 6
|
3月前
|
C语言
C语言字符(串)函数
C语言字符(串)函数
|
3月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
4月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
129 8
|
3月前
|
C语言
C语言常见字符函数和字符串函数精讲
C语言常见字符函数和字符串函数精讲
|
4月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解
本章介绍了C语言中的数组概念及应用。数组是一种存储同一类型数据的线性结构,通过下标访问元素。一维数组定义需指定长度,如`int a[10]`,并遵循命名规则。数组元素初始化可使用 `{}`,多余初值补0,少则随机。二维数组扩展了维度,定义形式为`int a[3][4]`,按行优先顺序存储。字符数组用于存储字符串,初始化时需添加结束符`\0`。此外,介绍了字符串处理函数,如`strcat()`、`strcpy()`、`strcmp()` 和 `strlen()`,用于拼接、复制、比较和计算字符串长度。
110 4
|
5月前
|
编译器 C语言
【C语言小知识】ctype.h系列的字符函数
【C语言小知识】ctype.h系列的字符函数
|
5月前
|
C语言
【C语言篇】字符和字符串以及内存函数详细介绍与模拟实现(下篇)
perror函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。
71 0
|
5月前
|
存储 安全 编译器
【C语言篇】字符和字符串以及内存函数的详细介绍与模拟实现(上篇)
当然可以用scanf和printf输入输出,这里在之前【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)已经讲过了,这里就不再赘述,主要介绍只针对字符的函数.
62 0