C语言--字符串旋转笔试题

news2024/9/22 19:29:44

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;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1013368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Truenas scale 配置Zerotier

Zerotier 注册 官网注册 zerotier&#xff0c; Truenas 安装 Zerotier Truenas的 APP -> Available Applications 中搜索 zerotier 在 Network中填入 zerotier 注册账户后给你的ID。 勾选 Host Network 在这里插入图片描述 Zerotier 中给定权限 左侧 框框 打钩&#…

Spring Boot集成Redis实现数据缓存

&#x1f33f;欢迎来到衍生星球的CSDN博文&#x1f33f; &#x1f341;本文主要学习Spring Boot集成Redis实现数据缓存 &#x1f341; &#x1f331;我是衍生星球&#xff0c;一个从事集成开发的打工人&#x1f331; ⭐️喜欢的朋友可以关注一下&#x1faf0;&#x1faf0;&…

MyEclipse 用tomcat部署SSM项目后,项目名称和当前项目不一致

MyEclipse 用tomcat部署SSM项目后&#xff0c;项目成功启动&#xff0c;但是访问所有接口报404 从这里可以看到&#xff0c;部署的项目名为accurate_sugar_control_yc_api&#xff0c;但实际我们项目名字应该为accurate_sugar_control_otc_api 解决办法 在本地找到项目的根目…

SAFe大规模敏捷认证SAFeScrumMaster Leading SAFe6.0官方双认证班,双证培训班

课程简介 根据最新的敏捷行业调研报告&#xff0c;敏捷的实施越来越广泛和深入&#xff0c;已经超越了选择几个试点团队进行敏捷尝试的阶段&#xff0c;大规模敏捷的实施已经成为企业敏捷转型的重中之重&#xff0c;因此作为Scrum Master仅仅了解单团队敏捷的运作是不够的&…

详解哈希,理解及应用

全文目录 概念哈希冲突及原因解决哈希冲突的方法闭散列线性探测二次探测扩容 开散列扩容 哈希的应用位图布隆过滤器 概念 通过映射关系将关键字映射到存储位置&#xff0c;并实现增删改查操作。 通过上面的方法构造出来的结构就叫哈希表&#xff08;散列表&#xff09;&#x…

基础算法---区间合并

直接上题目,不废话! 题目 给定 n 个区间 [l,r]&#xff0c;要求合并所有有交集的区间。 注意如果在端点处相交&#xff0c;也算有交集。 输出合并完成后的区间个数。 例如&#xff1a;[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。 输入格式 第一行包含整数 n。 接下来 n 行&am…

Linux中如何执行命令

命令格式&#xff1a; 主命令 [选项...] [参数&#xff08;要操作的对象&#xff09;...] ——选项&#xff1a;决定了命令的执行方式 长选项 --version 短选项 -V&#xff0c;-i&#xff0c;-d &#xff0c;-r ——参数&#xff1a;决定命令的作用对象 不同的命令参数不同 …

天府新区直播产业成型,成都直播产业基地开园倒计时!

直播&#xff0c;正逐渐衍化为当今社会的基础媒介&#xff0c;直播行业以“平台经济”为依托&#xff0c;构筑了数字经济一大“动脉”。 天府新区&#xff0c;数字激潮涌。蜂巢产业&#xff0c;让未来生长。 站在电商直播的时代风口上&#xff0c;树莓集团携手上市公司德商产投…

如何高效且优雅地使用Redis

本文从如下7个维度&#xff0c;带你全面理解Redis的最佳实践和优化&#xff1a; 内存性能可靠性运维安全资源规划监控 1、如何节省内存 1.1、控制Key的长度 在开发业务时&#xff0c;要提前预估Redis中写入key的数量&#xff0c;如果key数量达到了百万级别&#xff0c;那过…

【SpringMVC】之自定义注解

文章目录 一、Java注解1.1 简介1.2 分类1.2.1 JDK基本注解1.2.2 JDK元注解1.3 自定义注解 二、使用自定义注解2.1 **案例一&#xff08;获取类与方法上的注解值&#xff09;**2.2 **案例二&#xff08;获取类属性上的注解属性值&#xff09;**2.3 **案例三&#xff08;获取参数…

easycms v5.5 分析 | Bugku S3 AWD排位赛

前言 这个awd打的悲&#xff0c;后台默认用户名密码为admin:admin&#xff0c;但是几乎所有人都改了 而且一进去看到这个cms就有点懵逼&#xff0c;都不知道这个cms是干嘛的&#xff08;没用过相似的cms&#xff09; 虽然网上找出了很多相关的漏洞&#xff0c;但是不知道为什…

API实战教程:使用身份证OCR识别API构建一个应用

1. 引言 你是否曾经想过&#xff0c;只需拍一张身份证的照片&#xff0c;就能自动读取上面的所有信息&#xff1f;今天&#xff0c;我们要介绍的就是这样一个神奇的工具&#xff1a;身份证OCR识别API。不管你是技术小白还是初学者&#xff0c;跟着我们的步骤&#xff0c;你都可…

揭秘弹幕游戏制作

最近好多人问弹幕游戏&#xff0c;甚至是招人的也要DOTS做弹幕游戏... 实际上目前的弹幕游戏绝大多数应该和DOTS没有半点关系&#xff0c;别忘了DOTS这项技术渲染问题还没能够被合理解决呢 所以目前用的全都是GPU Instance这项技术&#xff0c;于是乎我决定下场写这篇帖子&am…

【藏经阁一起读】(69)__《阿里云视频云产品手册2023版》

【藏经阁一起读】&#xff08;69&#xff09;__《阿里云视频云产品手册2023版》 目录 一、概述阿里云视频云全产品矩阵 二、数字人视频制作 以下是人工智能虚拟人物的一些优秀代表作品及其特点&#xff1a; 阿里云视频云数字人视频制作产品优势 ▶高还原度的拟真效果 ▶场…

网络安全(黑客技术)自学规划

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性…

外包干了2个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

华为云云耀云服务器L实例评测|华为云云耀云服务器L实例开展性能评测

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

哪个牌子的电视盒子好用?锋哥数码揭晓最新电视盒子品牌排行榜

哪个牌子的电视盒子好用&#xff1f;不同人群需求不同选购侧重点也不同&#xff0c;老人要买操作简单的&#xff0c;小孩要买辅导课多的&#xff0c;追剧党要买看视频流畅广告少的&#xff0c;喜欢投屏的就更注重投屏体验&#xff0c;锋哥做电视盒子的测评已经很多年了&#xf…

SQL 2008 R2 和vCenter 5.1安装步骤与AQ

准备情况&#xff1a; Windows 2008 r2 sp1 64bit操作系统 Sql 2008 完整版安装包&#xff08;名称&#xff1a;SQLFULL_CHS.iso 安装完成会安装managment&#xff09; vCenter完整版安装包&#xff08;名称&#xff1a;VMware-VIMSetupall-5.1.0-799735.iso&#xff09; …

亿级长连接,淘宝接入层网关的架构设计

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近&#xff0c;尼恩指导一个小伙伴简历&#xff0c;写了一个《高并发网关项目》&#xff0c;此项目帮这个小伙拿到 字节/阿里/…