当前位置: 首页 > news >正文

C语言字符串左旋

一、前言

在这里插入图片描述
这个题目的完整题目是这样子的。

二、我们实现这个编程的思路

2.1暴力破解思想

假如有一个数组里面的字符串为”abcdef“,我们这时候就这样先将字符”a“移到最后再将其余的字符前移。

2.2三步移动法

同样我们还是假设一个数组里面存的是字符串”abcdef“,将数组可以划分成2个部分,一个是我们要进行移动的数组即”ab“,宁外一个部分就是”cdef“,我们可以将ab进行逆序,然后实现cdef逆序,最后整体逆序,就能得到我们想要的效果

三、代码实现

3.1暴力破解实现

#include<stdio.h>
#include<assert.h>
#include<string.h>
void left_move(char* arr, int k)
{//进行一次调换assert(arr!=NULL);int len = strlen(arr);int i, j;for (i = 0; i < k; i++){char tmp = *arr;for (j=0;j<len-1;j++){*(arr + j) = *(arr + j + 1);}*(arr + len-1 ) = tmp;}
}
int main()
{char arr[] = "abcdef";left_move(arr, 2);printf("%s\n", arr);return 0;
}

这个代码注意我们是使用变量tmp接收,我之前写代码的时候是使用指针tmp接收,并不能得到我们的效果。使用指针的话,它仅仅表示指向首元素,而我们的首元素的改变直接会改变我们tmp,而这里我们使用变量就不会出现这个问题,使用变量它开创一片空间能再里面存字符。

3.2三步交换法代码

#include<stdio.h>
#include<assert.h>
#include<string.h>
void my_reverse(char* left, char* right)
{assert(left != NULL);assert(right != NULL);while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}
void left_move(char* arr, int k)
{int len = strlen(arr);my_reverse(arr, arr + k - 1);//字符串左旁的倒序my_reverse(arr + k, arr + len - 1);//字符串右旁的倒序my_reverse(arr, arr + len - 1);//整个字符串的倒序
}int main()
{char arr[] = "abcdef";left_move(arr, 2);printf("%s\n", arr);return 0;
}

这个代码中的while循环条件能直接用指针,是因为指针指向的本身就是地址,再通过自增和自减我们就能实现字符串的倒序排列

四、结语

希望大家指出不足

http://www.lryc.cn/news/336137.html

相关文章:

  • Linux 中断会产生嵌套吗?
  • 嵌入式ARM版本银河麒麟操作系统V10SP1安装OPenGauss数据库
  • 深度学习八股文
  • jquery 自整理
  • MySQL | 加索引报错
  • 前端:自制年历
  • 9.手写JavaScript大数相加问题
  • FPGA开源项目分享——基于 DE1-SOC 的 String Art 实现
  • 通过 CLI 和引入的方式使用 React:基础入门
  • 第三资本:铸就辉煌非凡的资历
  • 基于激光雷达的袋装水泥智能装车系统有哪些优势?
  • 实战自动化修改主机名
  • 无人机GB42590接收端 +接收端,同时支持2.4G与5.8G双频WIFI模组
  • PVE系统的安装
  • 一辆汽车的节拍时间是怎样的?
  • 数据结构-合并两个有效数组
  • 华为2024年校招实习硬件-结构工程师机试题(四套)
  • 使用Pandas解决问题:对比两列数据取最大值的五种方法
  • rk3588 安卓13 应用安装黑名单的接口
  • Grafana数据库为MySQL
  • 【计算机考研】数据结构都不会,没有思路,怎么办?
  • word文档显示异常,mac安装word字体:仿宋gb2312
  • 【运维】Ubuntu 配置DNS服务器
  • 头歌-机器学习实验 第8次实验 决策树
  • Spring和Spring MVC和MyBatis面试题
  • 用vue3写一个AI聊天室
  • photomaker:customizing realistic human photos via stacked id embedding
  • FFmpeg - 如何在Linux上安装支持CUDA的FFmpeg
  • 新火种AI|商汤发布下棋机器人元萝卜,率先深入家庭场景。
  • CSS实现三栏自适应布局(两边固定,中间自适应)