C语言刷题(7)(字符串旋转问题)——“C”
各位CSDN的uu们你们好呀,今天,小雅兰的内容依旧是复习之前的知识点,那么,就是做一道小小的题目啦,下面,让我们进入C语言的世界吧
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
首先,给定一个字符串

如果是左旋一个字符,那么可以这样来做:把a拿出来,放在自己定义的一个变量中,再把b移到原来a的位置,以此类推,把c移到原先b的位置,把d移到原先c的位置,把e移到原先d的位置,把f移到原先e的位置,最后,把a放到原先f的位置,这样,就成功左旋一个字符啦


好啦,基本思路就是这个样子,然后,我们来写代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void left_move(char arr[], int k)
{int i = 0;int len = strlen(arr);k = k % len;for (i = 0; i < k; i++){//左旋一个字符//1char tmp = arr[0];//2int j = 0;for (j = 0; j < len - 1; j++){arr[j] = arr[j + 1];}//3arr[len - 1] = tmp;}
}
int main()
{char arr[20] = "abcdef";int k = 0;scanf("%d", &k);left_move(arr, k);printf("%s\n", arr);return 0;
}

另一种方法——三步翻转法

然后,肯定需要用到字符串逆序的函数,字符串逆序,就是:把b和c交换顺序,a和d交换顺序,f和e交换顺序
#include<stdio.h>
#include<string.h>
#include<assert.h>
void 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);k = k % len;reverse(arr, arr + k - 1);//左reverse(arr + k, arr + len - 1);//右reverse(arr, arr + len - 1);//整体
}
int main()
{char arr[20] = "abcdef";int k = 0;scanf("%d", &k);left_move(arr, k);printf("%s\n", arr);return 0;
}

写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:
给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
和上面的题目非常相似
#include<stdio.h>
#include<string.h>
int is_left_move(char arr1[], char arr2[])
{int i = 0;int len = strlen(arr1);for (i = 0; i < len; i++){//左旋一个字符//1char tmp = arr1[0];//2int j = 0;for (j = 0; j < len - 1; j++){arr1[j] = arr1[j + 1];}//3arr1[len - 1] = tmp;if (strcmp(arr1, arr2) == 0){return 1;}}return 0;
}
int main()
{char arr1[] = "abcdef";char arr2[] = "cdefab";int ret = is_left_move(arr1, arr2);if (ret == 1){printf("yes\n");}else{printf("no\n");}return 0;
}

#include<stdio.h>
#include<string.h>
int is_left_move(char arr1[], char arr2[])
{int len1 = strlen(arr1);int len2 = strlen(arr2);if (len1 != len2){return 0;}strncat(arr1, arr2, len1);if (strstr(arr1, arr2)){return 1;}else{return 0;}
}
int main()
{char arr1[] = "abcdef";char arr2[] = "cdefab";int ret = is_left_move(arr1, arr2);if (ret == 1){printf("yes\n");}else{printf("no\n");}return 0;
}
这个代码中运行了很多字符串函数,正好小雅兰之前写过这样的知识点:
字符函数和字符串函数(上)——“C”_认真学习的小雅兰.的博客-CSDN博客
字符函数和字符串函数(下)——“C”_认真学习的小雅兰.的博客-CSDN博客

好啦,小雅兰今天的内容就到这里啦,继续加油!!!

相关文章:
C语言刷题(7)(字符串旋转问题)——“C”
各位CSDN的uu们你们好呀,今天,小雅兰的内容依旧是复习之前的知识点,那么,就是做一道小小的题目啦,下面,让我们进入C语言的世界吧 实现一个函数,可以左旋字符串中的k个字符。 例如: A…...
有趣且重要的JS知识合集(18)浏览器实现前端录音功能
1、主题描述 兼容多个浏览器下的前端录音功能,实现六大录音功能: 1、开始录音 2、暂停录音 3、继续录音 4、结束录音 5、播放录音 6、上传录音 2、示例功能 初始状态: 开始录音: 结束录音: 录音流程 …...
面试官:聊聊你知道的跨域解决方案
跨域是开发中经常会遇到的一个场景,也是面试中经常会讨论的一个问题。掌握常见的跨域解决方案及其背后的原理,不仅可以提高我们的开发效率,还能在面试中表现的更加游刃有余。 因此今天就来和大家从前端的角度来聊聊解决跨域常见的几种方式。…...
SpringCloud五大核心组件
Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。 服务发现——Netflix Eureka …...
Verilog HDL语言入门(二)
强烈建议用同步设计2.在设计时总是记住时序问题3.在一个设计开始就要考虑到地电平或高电平复位、同步或异步复位、上升沿或下降沿触发等问题,在所有模块中都要遵守它4.在不同的情况下用if和case,最好少用if的多层嵌套(1层或2层比较合适&#…...
Simpleperf详细使用
一、Simpleperf介绍 Simpleperf是一个强大的命令行工具,它包含在NDK中,可以帮助我们分析应用的CPU性能。Simpleperf可以帮助我们找到应用的热点,而热点往往与性能问题相关,这样我们就可以分析修复热点源。 如果您更喜欢使用命令…...
【算法基础】二分图(染色法 匈牙利算法)
一、二分图 1. 染色法 一个图是二分图,当且仅当,图中不含奇数环。在判别一个图是否为二分图⑩,其实相当于染色问题,每条边的两个点必须是不同的颜色,一共有两种颜色,如果染色过程中出现矛盾,则说明不是二分图。 for i = 1 to n:if i 未染色DFS(i, 1); //将i号点染色未…...
Caputo 分数阶微分方程-慢扩散方程初边值问题基于L1 逼近的空间二阶方法及其Matlab程序实现
2.3.3 Caputo 分数阶一维问题基于 L1 逼近的空间二阶方法 考虑如下时间分数阶慢扩散方程初边值问题 { 0 C D t α u ( x , t ) = u...
I.MX6ULL_Linux_驱动篇(29) GPIO驱动
Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以本篇的 LED 灯驱动最终也是对 I.MX6ULL 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux 的驱动框架。I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 …...
jupyter的安装和使用
目录 ❤ Jupyter Notebook是什么? notebook jupyter 简介 notebook jupyter 组成 网页应用 文档 主要特点 ❤ jupyter notebook的安装 notebook jupyter 安装有两种途径 1.通过Anaconda进行安装 2.通过pip进行安装 启动jupyter notebook ❤ jupyter …...
Springboot新手开发 Cloud篇
前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:后端专栏 📧如果文章知识点有错误的地方,…...
Linux:函数指针做函数参数
#include <stdio.h> #include <stdlib.h> //创建带有函数指针做参数的函数框架api //调用者要先实现回调函数 //调用者再去调用函数框架 //所谓的回调是指 调用者去调用一个带有函数指针做参数的函数框架,函数框架反过来要调用调用者提供的回调函数 …...
Vue3(递归组件) + 原生Table 实现树结构复杂表格
一、递归组件 什么是递归,Javascript中经常能接触到递归函数。也就是函数自己调用自己。那对于组件来说也是一样的逻辑。平时工作中见得最多应该就是菜单组件,大部分系统里面的都是递归组件。文章中我做了按需引入的配置,所以看不到我引用组…...
ArrayList底层源码解析
Java源码系列:下方连接 http://t.csdn.cn/Nwzed 文章目录前言一、**ArrayList底层结构和源码分析**无参构造调用创建ArrayList集合无参构造总结:发文3个工作日后 up 会把总结放入前言部分,但也诚邀读者总结,可放入评论区有参构造…...
python:DIY字符画的程序使用说明.doc
目录开发环境要求运行方法具体的操作步骤如下:代码示例源码及运行程序下载地址开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统:Windows 7、Windows 10。 Python版本:Python 3.7.0。 开发工具:Python IDLE。 …...
【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解
【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解 文章目录【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解1. 介绍2. API3. 代码示例与效果3.1 代码3.2 效果4. 参考1. 介绍 在OpenCV图像加法cv2.add函数详解详细介绍了图像的加法运…...
容器的老祖宗LXC和Docker的关系
一、什么是LXC? LXC(Linux Container的缩写)是一个基于Linux内核的容器虚拟化技术,它提供了一种轻量级、快速、简便的方式来创建和管理系统容器。与传统虚拟化技术不同,LXC并不会模拟硬件,而是利用Linux内…...
Webpack迁移Rspack速攻实战教程(前瞻版)
前言 rspack 即将开源,但社区中不乏有已经落地的 case ,比如 rspack-migration-showcase 、 modern.js 等。 基于此,本文将介绍如何迁移一个近似于 CRA( create-react-app ) 的项目到 rspack 。 在阅读本文前&#…...
一行代码“黑”掉任意网站
文章目录只需一行代码,轻轻一点就可以把任意网站变成暗黑模式。 首先我们先做一个实验,在任意网站中,打开浏览器开发者工具(F12),在 C1onsole 控制台输入如下代码并回车: document.documentElement.style.filterinve…...
51单片机入门 -驱动 8x8 LED 点阵屏
硬件型号、软件版本、以及烧录流程 操作系统:Windows 10 x84-64单片机:STC89C52RC编译器:SDCC烧录软件:stcgal 1.6开发板:普中51单片机开发板A2套件(2022) 在 VS Code 中新建项目到烧录的过程…...
AI训练神器!免配置YOLO可视化工具,标注+训练+推理全流程集成,支持YOLOv8~v12+50系显卡,开源可二开
AI训练神器!免配置YOLO可视化工具,标注训练推理全流程集成,支持YOLOv8~v1250系显卡,开源可二开 yolo可视化训练工具,免配置环境,打开界面即可训练yolo模型,提供源代码及完整打包项目,…...
第 11 章 追踪与性能分析(OpenOCD)
第 11 章 追踪与性能分析 导读:现代 ARM 处理器内置了丰富的 CoreSight 追踪基础设施,包括 ETM 指令追踪、ITM/DWT 数据追踪、SWO/TPIU 追踪输出以及 SEGGER RTT 高速日志。本章将系统介绍如何在 OpenOCD 中配置和使用这些追踪功能,帮助开发者在不侵入目标程序的前提下,完成…...
3个高效学习技巧:如何用JiYuTrainer实现课堂学习体验优化
3个高效学习技巧:如何用JiYuTrainer实现课堂学习体验优化 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 问题场景:当数字化教学遇上学习需求冲突 "…...
别再为ImageNet-1k 2012下载发愁了:手把手教你用迅雷+MD5校验搞定训练集和测试集
高效获取ImageNet-1k数据集的完整实践指南 在计算机视觉研究领域,ImageNet-1k数据集堪称是算法开发的"基石"。无论是训练经典的ResNet模型,还是验证最新的Transformer架构,这个包含1000个类别、超过120万张图像的数据集都是不可或缺…...
高效USB设备管理工具:一键安全弹出的专业解决方案
高效USB设备管理工具:一键安全弹出的专业解决方案 【免费下载链接】USB-Disk-Ejector A program that allows you to quickly remove drives in Windows. It can eject USB disks, Firewire disks and memory cards. It is a quick, flexible, portable alternative…...
**基于Python与Neo4j的知识图谱构建实践:从数据到语义网络的跃迁**在人工智能与大数据深度融合
基于Python与Neo4j的知识图谱构建实践:从数据到语义网络的跃迁 在人工智能与大数据深度融合的时代,知识图谱已成为智能问答、推荐系统、语义搜索等场景的核心基础设施。本文将围绕 Python Neo4j 构建一个小型但功能完整的知识图谱系统,带你完…...
从加速度传感器到Symbol生成:Cadence VerilogA建模避坑指南
从加速度传感器到Symbol生成:Cadence VerilogA建模避坑指南 在MEMS传感器设计领域,将物理量精确转化为可仿真的电学模型是每个硬件工程师必须掌握的技能。三明治式加速度传感器作为典型的多物理场耦合器件,其VerilogA行为级建模过程既考验工…...
Linux 配置文件 bashrc
本文详细介绍了Linux系统中配置文件bashrc的作用、使用方法和配置技巧。bashrc文件是bash shell在用户登录时自动执行的脚本,用于定义用户的环境变量和别名等个性化设置。文章首先解释了bashrc文件的重要性,并介绍了如何编辑和修改该文件。接着ÿ…...
Cadence IC617实战:VerilogA vs analogLib搭建全差分放大器,哪个更适合你?
Cadence IC617实战:VerilogA与analogLib全差分放大器设计深度对比 在模拟IC设计领域,全差分放大器作为基础构建模块,其实现方式直接影响设计效率和仿真精度。Cadence IC617作为行业标准工具,提供了VerilogA和analogLib两种截然不同…...
OpenClaw隐私保护方案:ollama-QwQ-32B本地化数据处理流程
OpenClaw隐私保护方案:ollama-QwQ-32B本地化数据处理流程 1. 为什么需要本地化隐私保护方案 去年我在处理一份涉及客户隐私的市场分析报告时,遇到了一个棘手问题:当使用云端AI服务进行数据清洗和分析时,不得不将包含敏感字段的原…...
