【旋转字符】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这个如果看不懂,可以结合图看一下。

相关文章
|
8天前
|
C语言
C语言学习记录——鹏哥字符分类函数、字符转换函数
C语言学习记录——鹏哥字符分类函数、字符转换函数
10 2
|
16天前
|
存储 C语言 索引
C语言字符数组深入解析与应用实例
C语言字符数组深入解析与应用实例
16 0
|
16天前
|
存储 C语言
C语言中的字符指针技术详解
C语言中的字符指针技术详解
23 0
|
16天前
|
C语言 C++
从C语言到C++_27(AVL树)概念+插入接口实现(四种旋转)(下)
从C语言到C++_27(AVL树)概念+插入接口实现(四种旋转)
22 2
|
16天前
|
C语言 容器
从C语言到C++_27(AVL树)概念+插入接口实现(四种旋转)(上)
从C语言到C++_27(AVL树)概念+插入接口实现(四种旋转)
24 4
|
17天前
|
安全 Serverless C语言
C语言(10)----字符函数和字符串函数
C语言(10)----字符函数和字符串函数
5 0
|
18天前
|
Go C语言
【C语言】字符+字符串函数精讲
【C语言】字符+字符串函数精讲
|
21天前
|
C语言
C语言基础 - 字符串/字符数组最易错考点
该文探讨了C语言中&#39;\0&#39;字符对字符串和字符数组的重要性,以及`strlen`和`sizeof`的区别。&#39;\0&#39;作为字符串的结束标志,确保了正确打印和计算字符串长度。示例代码显示,未包含&#39;\0&#39;的字符数组打印时可能出现随机值。`strlen`计算字符串长度,不包含&#39;\0&#39;,而`sizeof`返回变量或数组的总字节数,包括&#39;\0&#39;。文章还提醒注意转义字符在字符串中的影响,例如`\t`和`\62`。最后总结了字符串和字符数组处理时应注意的要点。
30 0
C语言基础 - 字符串/字符数组最易错考点
|
21天前
|
C语言 数据安全/隐私保护
【C语言】分支和循环的应用(二分查找、字符移动、模拟登录界面)
【C语言】分支和循环的应用(二分查找、字符移动、模拟登录界面)
24 0
|
22天前
|
C语言
C语言期末习题之统计大写字母,数字和其他字符的个数
C语言期末习题之统计大写字母,数字和其他字符的个数
21 0