C语言--字符串旋转笔试题
C语言–字符串旋转笔试题
文章目录
- C语言--字符串旋转笔试题
- 一、字符串左旋
- 1.1 思路1
- 1.2 思路1代码
- 1.3 思路2
- 1.4 思路2代码
- 二、字符串旋转结果判断
- 2.1 思路1
- 2.2 思路2
一、字符串左旋
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
1.1 思路1
先把第一个元素取出来暂时存放在变量中,后面的整体移动到前面,然后把第一个变量存放在最后的位置,循环往复。

1.2 思路1代码
#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);for (i = 0; i < k; i++){//先保存首元素char tmp = arr[0];//将后面的值放到前面int j = 0;for (j = 0; j < len - 1; j++){arr[j] = arr[j + 1];}//将首元素放到最后arr[len - 1] = tmp;}
}
int main()
{char arr[] = "abcdefg";int k = 2;left_move(arr,k);printf("%s", arr);return 0;
}
1.3 思路2
逆序法:
ABCD
例如我要左旋2个字符,首先先将AB逆序,变成BA,然后再将CD逆序,变成DC,此时就是BADC,然后将整体逆序,变成CDBA

1.4 思路2代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
#include<assert.h>
//逆序函数
void reverse(char* left, char* right)
{assert(left);assert(right);while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}}
void left_move(char arr[], int k)
{int i = 0;int len = strlen(arr);//逆序左边reverse(arr, arr + k - 1);//逆序右边reverse(arr + k, arr + len - 1);//逆序整体reverse(arr, arr + len - 1);
}
int main()
{char arr[] = "abcdefg";int k = 2;left_move(arr,k);printf("%s", arr);return 0;
}
二、字符串旋转结果判断
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
2.1 思路1
依赖于上面写过的旋转函数,将字符串旋转之后看两个字符串是否相同来判断
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>void reverse(char* left, char* right)
{assert(left);assert(right);while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}}
void left_move(char arr[], int k)
{int i = 0;int len = strlen(arr);//逆序左边reverse(arr, arr + k - 1);//逆序右边reverse(arr + k, arr + len - 1);//逆序整体reverse(arr, arr + len - 1);
}
int is_left_move(char arr1[], char arr2[])
{int len1 = strlen(arr1);int len2 = strlen(arr2);if (len1 != len2)//如果两个字符串长度不相同,一定不是旋转得来的{return 0;}int i = 0;for (i = 0; i < len1; i++){left_move(arr1, 1);//每次旋转一个,然后判断是否相等if (strcmp(arr1, arr2) == 0)//如果出现小写字母,在这里就会发现{return 1;}}return 0;
}
int main()
{char arr1[] = "AABCD";char arr2[] = "BCDAA";int ret = is_left_move(arr1, arr2);if (ret == 1){printf("YES\n");}else{printf("NO\n");}return 0;}
2.2 思路2
AABCD 如果在后面再加上一组 AABCD 得出 AABCDAABCD那么就会得到AABCD所有旋转之后的结果,在和另一个字符串比较的时候,只需要判断其是不是AABCDAABCD的字串就可以了,前提还是这两个字符串长度相等的情况下
#define _CRT_SECURE_NO_WARNINGS 1
#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, arr1, len1);//字符串追加函数,len1表示追加的个数if (strstr(arr1, arr2) != NULL)//strstr是在arr1字符串中查找arr2是否存在//如果存在则返回arr2在arr1中第一次出现的地址//如果不存在则返回NULL{return 1;}else{return 0;}}
int main()
{char arr1[20] = "AABCD";char arr2[] = "BCDAA";int ret = is_left_move(arr1, arr2);if (ret == 1){printf("YES\n");}else{printf("NO\n");}return 0;}
相关文章:
C语言--字符串旋转笔试题
C语言–字符串旋转笔试题 文章目录 C语言--字符串旋转笔试题一、字符串左旋1.1 思路11.2 思路1代码1.3 思路21.4 思路2代码 二、字符串旋转结果判断2.1 思路12.2 思路2 一、字符串左旋 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字…...
IntelliJ IDEA使用_常规设置
文章目录 版本说明主题设置取消检查更新依赖自动导入禁止import xxx.*、允许import内部类显示行号、方法分割线、空格代码提示(匹配所有字母)自定义注释颜色添加头部注释自定义字体设置字符编码关联本地GitJDK编译版本Maven配置Tomcat配置代码注释设置头…...
ResponseBodyAdvice 获取参数
废话不多说,简练,一针见血,解决问题,才是最好的。 首先肯定是重写了这个beforeBodyWrite方法 重点来了,获取请求参数: request.getBody()返回一个inputStream流,这里你可以 使用很多方法把这个…...
人力资源服务升级正当时,法大大助力佩信集团加速数字化
人力资源服务业是现代服务业的一个重要门类,在促进就业创业、提供人才服务方面发挥重要作用。同时面对产业转型升级、平台经济快速发展、企业用工成本提高等新形势,发展人力资源服务业对于促进社会化就业、更好发挥我国人力资源优势、服务经济社会发展具…...
UG\NX二次开发 二维向量相加
文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 二维向量相加 效果: 代码: #include "me.hpp"void doIt() {const double vec1[2] = { 1.0,2.0 };const double vec2[2] = { 2.0,2.…...
RabbitMQ深入 —— 持久化和发布确认
前言 前面的文章荔枝梳理了如何去配置RabbitMQ环境并且也介绍了两种比较简单的运行模式,在这篇文章中荔枝将会继续梳理有关RabbitMQ的持久化机制以及发布确认模式的相关知识,希望能够帮助到大家~~~ 文章目录 前言 一、持久化 1.1 队列持久化 1.2 消息…...
人脸识别三部曲
人脸识别三部曲 首先看目录结构图像信息采集 采集图片.py模型训练 训练模型.py人脸识别 人脸识别.py效果 首先看目录结构 引用文121本 opencv │ 采集图片.py │ 训练模型.py │ 人脸识别.py │ └───trainer │ │ trainer.yml │ └───data │ └──…...
【Linux网络编程】Socket-TCP实例
netstat -nltp 无法用read函数读取UDP套接字的数据,因为UDP是面向数据报,而TCP是面向数据流。 客户端不需要 bind,listen,accept,但是客户端需要connect,connect会自动做bind工作。 #include <sys/sock…...
<OpenCV> 边缘填充
OpenCV边缘填充 1、边缘填充类型 enum cv::BorderTypes ORDER_CONSTANT iiiiii|abcdefgh|iiiiiii with some specified i -常量法,常熟值填充; BORDER_REPLICATE aaaaaa|abcdefgh|hhhhhhh -复制法,复制边缘像素; BORDER_R…...
【视觉SLAM入门】7.3.后端优化 基于KF/EKF和基于BA图优化的后端,推导及举例分析
"时间倾诉我的故事" 1. 理论推导2. 主流解法3. 用EKF估计状态3.1. 基于EKF代表解法的感悟 4. 用BA法估计状态4.1 构建最小二乘问题4.2 求解BA推导4.3 H的稀疏结构4.4 根据H稀疏性求解4.5 鲁棒核函数4.6 编程注意 5.总结 引入: 前端里程计能给出一个短时间…...
Docker概念通讲
目录 什么是Docker? Docker的应用场景有哪些? Docker的优点有哪些? Docker与虚拟机的区别是什么? Docker的三大核心是什么? 如何快速安装Docker? 如何修改Docker的存储位置? Docker镜像常…...
PHP请求API接口案例采集电商平台数据获取淘宝/天猫优惠券查询示例
优惠券查询API接口对于用户和商家来说具有重要作用,可以方便地获取优惠券信息,进行优惠券搜索和筛选,参与活动和促销推广,提供数据分析和决策支持,提升用户体验和忠诚度,为商家增加销售额和市场竞争力。 t…...
计算机网络:三次握手与四次挥手
摘取作者:拓跋阿秀 三次握手 三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后…...
Visual Studio 调试上传文件时自动停止运行的解决方法
进入:选项,项目和解决方案,Web项目, 找到在浏览器窗口关闭时停止调试程序,在调试停止时关闭浏览器 将它不要勾关闭,然后重新启动下Visual Studio,上传文件时就可以调试了...
使用scp命令失败出错
使用scp命令失败出错,无反应。 解决: 1.使用ifconfig查看目标主机公网IP地址 ifconfig需使用公网ip 2.配置免密登录 可参考 远程登录ssh ssh-copy-id root目标主机ip再次尝试scp命令。 SCP(Secure Copy)是一个用于在本地主机和…...
kafka增加磁盘或者分区,topic重分区
场景:kafka配置文件log.dirs增加了几个目录,但是新目录没有分区数据写入,所以打算进行重分区一下。 1.生成迁移计划 进入kafka/bin目录 新建 topic-reassign.json,把要重分区的topic按下面格式写。 { "topics": [{ …...
SpringMVC系列(五)之JSR303和拦截器
目录 一. JSR303 1.1 JSR303是什么 1.2 为什么要使用JSR303 1.3 JSR303常用注解 1.4 JSR303快速入门 1. 导入相关pom依赖 2. 配置校验规则 3. 入门示例 二. SpringMVC的拦截器 2.1 什么是拦截器 2.2 拦截器与过滤器的区别 2.3 拦截器工作原理 2.4 入门示例 1. 创建…...
LCP 01.猜数字
题目来源: leetcode题目,网址:LCP 01. 猜数字 - 力扣(LeetCode) 解题思路: 遍历比较即可。 解题代码: class Solution {public int game(int[] guess, int[] answer) {int res0;for(int …...
智能小车开发
1.材料 店铺:店内搜索页-risym旗舰店-天猫Tmall.com 1.四个小车轮子 2.四个直流减速电机 3.两节18650锂电池(每节3.7V),大概电压在7.4V左右,电压最好不要超过12V不然会损坏电机驱动 4.一个18650锂电池盒 5.一个L…...
RDMA性能测试工具集preftest_README
文章目录 1 概述2 安装3 测试方法说明4 测试说明5 运行测试所有测试的通用选项延迟测试选项带宽测试选项ib_send_lat(发送延迟测试)和 ib_send_bw(发送带宽测试)的选项ib_atomic_lat(原子延迟测试)和 ib_at…...
Python实战:两步移动搜索法(2SFCA)在医疗资源可达性分析中的应用
1. 什么是两步移动搜索法(2SFCA)? 第一次听说两步移动搜索法(2SFCA)时,我完全被这个专业名词唬住了。后来在实际项目中用了才发现,它其实就是个"找资源"的聪明算法。想象一下你住在一…...
AI神器10秒搞定网申,求职效率翻倍
投简历填表单填到崩溃?这个AI神器帮你10秒搞定网申,海投效率直接拉满! 秋招春招跑过招聘季的朋友,一定都懂这种窒息感: 好不容易筛好了目标公司,点开招聘官网,迎面而来就是几十项的简历表单。姓名、电话、邮箱、教育经历从高中填到大学、实习经历要写清每段的起止时间…...
OpenClaw人人养虾:接入iMessage
此方案为旧版 iMessage 接入方式,仅适用于 macOS 且配置复杂。新用户请优先使用 BlueBubbles 方案,它更稳定且功能更丰富。 前置要求 macOS 12 Monterey 或更高版本(仅支持 macOS)已登录 Apple ID 并激活 iMessageHomebrew 包管…...
前端AI新选择:Transformer.js vs TensorFlow.js,你的项目该用哪个?
前端AI新选择:Transformer.js与TensorFlow.js深度技术选型指南 当浏览器逐渐成为新一代计算平台时,前端开发者正面临一个关键抉择:如何在客户端高效部署机器学习能力?我曾为一个医疗咨询项目选择技术方案时,团队在Tran…...
深入剖析YOLOv8核心模块:从架构设计到实战应用全解析
1. YOLOv8架构设计揭秘 YOLOv8作为目标检测领域的标杆模型,其架构设计处处体现着工程师的巧思。我第一次拆解它的代码时,最惊艳的是它的模块化设计——就像搭积木一样,每个组件都能灵活替换。核心的Backbone部分采用CSPDarknet53结构…...
2026权威评测:毕业论文AIGC降重盘点!免费试用首选
【CSDN极客特稿AI科研生产力专栏】 各位深夜还在实验室和IDE里跑模型、改Paper的硕博兄弟们,见字如面。 把日历翻到2026年,当大语言模型(LLM)的参数量卷上天际的同时,各大高校的“反作弊探测矩阵”也完成了史诗级的底层…...
别再纠结在线辨识了!聊聊永磁同步电机(PMSM)离线参数自学习的完整流程与避坑指南
永磁同步电机离线参数辨识实战:从理论到工程落地的全流程解析 在电机控制领域,参数辨识一直是个让人又爱又恨的话题。尤其是当项目从实验室走向量产时,那些在仿真中运行良好的算法,往往会因为实际电机参数的偏差而表现失常。我曾亲…...
AsrTools全攻略:革新语音转文字效率的智能解决方案
AsrTools全攻略:革新语音转文字效率的智能解决方案 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate tex…...
新手友好:通过快马用自然语言生成你的第一个openclaw卸载脚本
作为一个刚接触编程的新手,想要自己动手写一个软件卸载脚本确实会有点无从下手。最近我在学习Python时,发现用InsCode(快马)平台可以很轻松地通过自然语言描述生成完整代码,特别适合我们这样的初学者。下面我就分享一下如何用这个平台快速创建…...
JavaScript动态交互:在网页中实时调整参数并预览LiuJuan生成效果
JavaScript动态交互:在网页中实时调整参数并预览LiuJuan生成效果 你是不是也遇到过这种情况?想用AI模型生成图片,但每次调整参数都要在代码里改来改去,然后重新运行脚本,等半天才能看到效果。整个过程就像在开盲盒&am…...
