经典左旋,指针面试题

news2024/12/23 23:09:35

今天给大家带来几道面试题!

实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB

我们可以先自己自行思考,下面是参考答案:

方法一:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void reverse_part(char* str, int start, int end) //将字符串从start到end这一段逆序
{
	int i, j;
	char tmp;

	for (i = start, j = end; i < j; i++, j--)
	{
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	}
}

void leftRound(char* src, int n)
{
	int len = strlen(src);
	reverse_part(src, 0, n ); //逆序前段
	reverse_part(src, n+1, len - 1); //逆序后段
	reverse_part(src, 0, len - 1); //整体逆序
}


int main()
{
	char str[] = "abcdfghijk";
	int n = 0;
	printf("左旋几位?\n");
	scanf("%d", &n);
	printf("原来字符串\n");
	printf("%s", str);

	leftRound(str, n-1);
	printf("\n左旋%d位后的字符串\n",n);
	printf("%s", str);



	return 0;
}

 

具体思路:

我们先创建一个倒序字符串的函数,具体是要将字符串分别进行倒叙后,才能得到左旋字符串。

即:先将左旋前部分倒叙,再将后半部分进行倒叙,最后将整个字符串进行倒叙。即可得到左旋n

位的字符串。 


方法二:


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>void leftRound(char* src, int n)
{
	int len = strlen(src);
	 
	char tmp[256] = { 0 }; //更准确的话可以选择malloc len + 1个字节的空间来做这个tmp

	strcpy(tmp, src + n); //先将后面的全部拷过来
	strncat(tmp, src, n); //然后将前面几个接上
	strcpy(src, tmp); //最后拷回去
}











int main()
{
	char str[] = "abcdfghijk";
	int n = 0;
	printf("左旋几位?\n");
	scanf("%d", &n);
	printf("原来字符串\n");
	printf("%s", str);

	leftRound(str, n);
	printf("\n左旋%d位后的字符串\n",n);
	printf("%s", str);



	return 0;
}

具体思路:

这个方法则是运用了字符串函数进行左旋,首先先将n位后的元素拷贝到tem中,然后再将n位元素也拷贝到tem中,此时tem中已经是完成左旋的字符串,最后将tem再拷贝到初始数组中即可。这个需要形成一个辅组空间进行储存,好让字符串可以拷贝和连接。

缺点:需要创建一个辅助空间,来协助代码的完成


题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

void swap_arr(int arr[], int sz)
{
	int left = 0;
	int right = sz - 1;
	int tmp = 0;


	while (left < right)
	{
		// 从前往后,找到一个偶数,找到后停止
		while ((left < right) && (arr[left] % 2 == 1))
		{
			left++;
		}

		// 从后往前找,找一个奇数,找到后停止
		while ((left < right) && (arr[right] % 2 == 0))
		{
			right--;
		}

		// 如果偶数和奇数都找到,交换这两个数据的位置
		// 然后继续找,直到两个指针相遇
		if (left < right)
		{
			tmp = arr[left];
			arr[left] = arr[right];
			arr[right] = tmp;
		}
	}
}

int main()
{
	int arr[] = { 37,57,2,4,40,32,44,33,55,68 };
	int sz = sizeof(arr) / sizeof(arr[3]);

	printf("原数组排序\n");
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	swap_arr(arr, sz);
	printf("排序完后的数组\n");
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}


	return 0;
}

具体思路:
1. 给定两个下标left和right,left放在数组的起始位置,right放在数组中最后一个元素的位置
2. 循环进行一下操作
 a. 如果left和right表示的区间[left, right]有效,进行b,否则结束循环
 b. left从前往后找,找到一个偶数后停止
 c. right从后往前找,找到一个奇数后停止
 d. 如果left和right都找到了对应的数据,则交换,继续往下找。


 思维题

大家观察下方代码,觉得打印的是什么呢?

#include <stdio.h>
int i;
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0; 
}

好了公布答案:   >.

首先我们要知道C语言中,0为假,非0即为真。

全局变量,没有给初始值时,编译其会默认将其初始化为0。

i的初始值为0,i 结果-1,i为整形,sizeof(i)求i类型大小是4,按照此分析来看,结果应该是 <,但是sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧i自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字,超过4或者8,故实际应该为  >.


 好了今天的文章到这!

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

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

相关文章

MongoDB安装以及卸载,通过Navicat 15 for MongoDB连接MongoDB

查询id&#xff1a; docker ps [rootlocalhost ~]# docker stop c7a8c4ac9346 c7a8c4ac9346 [rootlocalhost ~]# docker rm c7a8c4ac9346 c7a8c4ac9346 [rootlocalhost ~]# docker rmi mongo sudo docker pull mongo:4.4 sudo docker images 卸载旧的 sudo docker stop mong…

【脑电信号处理与特征提取】P7-涂毅恒:运用机器学习技术和脑电进行大脑解码

运用机器学习技术和脑电进行大脑解码 科学研究中的大脑解码 比如2019年在Nature上一篇文章&#xff0c;来自UCSF的Chang院士的课题组&#xff0c;利用大脑活动解码语言&#xff0c;帮助一些患者恢复语言功能。 大脑解码的重要步骤 大脑解码最重要的两步就是信号采集和信号…

【Linux】Daemon守护进程详解

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;Linux系列专栏&#xff1a;Linux基础 &#x1f525; 给大家…

JAVASE进阶:String常量池内存原理分析、字符串输入源码分析

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;JAVASE进阶&#xff1a;内存原理剖析&#xff08;1&#xff09;——数组、方法、对象、this关键字的内存原理 &#x1f4da;订阅…

嵌入式人工智能/深度学习/神经网络导论

加我微信hezkz17进入嵌入式人工智能技术研究开发交流答疑群 1 嵌入式人工智能&#xff0c;嵌入式深度学习含义&#xff1f; &#xfffc; 嵌入式人工智能&#xff08;Embedded Artificial Intelligence&#xff09;是指将人工智能技术应用于嵌入式系统中&#xff0c;使其具备…

计算机网络_1.4 计算机网络的定义和分类

1.4 计算机网络的定义和分类 一、计算机网络的定义&#xff08;无唯一定义&#xff09;二、计算机网络的分类&#xff08;从不同角度分类&#xff09;1、交换方式2、使用者3、传输介质4、覆盖范围5、拓扑结构 笔记来源&#xff1a; B站 《深入浅出计算机网络》课程 一、计算机…

11张宝藏GIS开发思维导图,重点清晰,建议带走!

在GIS开发过程中&#xff0c;涉及大量的数据、地图、工具和技术。通过思维导图&#xff0c;我们可以将这些复杂的元素进行可视化&#xff0c;更好地理解和整理思路&#xff0c;提高开发效率。 同时思维导图利用了色彩、线条、关键词、图像等元素&#xff0c;可以加强记忆的可能…

Android平台如何实现RTSP转GB28181

为什么要做GB28181设备接入侧&#xff1f; 实际上&#xff0c;在做Android平台GB28181设备接入模块的时候&#xff0c;我们已经有了非常好的技术积累&#xff0c;比如RTMP推送、轻量级RTSP服务、一对一互动模块、业内几乎最好的RTMP|RTSP低延迟播放器。 Android平台GB28181接…

好书推荐丨保姆级Midjourney教程,这本写给大家看的设计书闭眼入!

文章目录 写在前面好书推荐Part.1Part.2Part.3 粉丝福利写在后面 写在前面 在AI绘画界&#xff0c;有每日经典一问&#xff1a;“你今天用Midjourney画了啥&#xff1f;”晒作品成为重头戏。 小红书上关于Midjourney出的图片点赞数惊人。 reddit上的恶搞幽默图片热度居高不下…

C#,幸运数字(Lucky Number)的算法与源代码

Lucky Number不是蔡依林的歌曲名字哦。 给你的NV朋友选一个幸运数字吧。 1 幸运数字是怎么产生的&#xff1f; 幸运数是整数的子集。与其进行大量理论研究&#xff0c;不如让我们来看看得出幸运数字的过程&#xff0c; 以整数集为例&#xff1a; 1,2,3,4,5,6,7,8,9,10,11,…

NAT 机制的工作流

NAT机制&#xff08;网络地址映射&#xff09;先把IP地址分成两个大类 1. 私网IP / 局域网IP 2. 公网IP / 广域网IP 要求公网的设备&#xff0c;对应的公网IP&#xff0c;都必须是唯一的&#xff0c;但是私网上/局域网上的设备&#xff0c;使用私网IP&#xff0c;只要保证局域网…

Linux 网络配置及基础服务

目录 一. 查看网络配置信息的相关命令 1.1 ifconfig 命令 作用 1&#xff1a; 作用 2&#xff1a; 拓展&#xff1a; 1.2 ip/ethtool命令 1.3 hostname命令 1.4 route 命令 1.5 netstat 命令 1.6 ss&#xff08;socket statistics&#xff09;命令 1.7 ping 命令 …

vscode 插件 Tailwind CSS IntelliSense 解决 class 提示问题

问题描述&#xff1a; 如下写js字符串是没有class智能提示的&#xff1a; const clsName bg-[#123456] text-[#654321] return <div className{clsName}></div>解决方案&#xff1a; 安装 clsx 依赖 pnpm i clsx设置 vscode 的 settings.json {"tailwin…

【C++】开源:Windows图形库EasyX配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Windows图形库EasyX配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#…

RabbitMQ 死信队列应用

1. 概念 死信队列&#xff08;Dead Letter Queue&#xff09;是在消息队列系统中的一种特殊队列&#xff0c;用于存储无法被消费的消息。消息可能会因为多种原因变成“死信”&#xff0c;例如消息过期、消息被拒绝、消息队列长度超过限制等。当消息变成“死信”时&#xff0c;…

对付勒索病毒,复杂的往往无法落地

一道道复杂门墙防护安全&#xff0c; 还是一个精密的锁更安全&#xff1f; &#x1f447;&#x1f447;&#x1f447; 在网络数据安全问题频发的当下&#xff0c;除了常规的备份、灾备措施以外&#xff0c;企业是否有做好应对最坏情况的准备&#xff1f;一旦病毒绕过了一道道…

极限的运算法则【高数笔记】

【定理】 1. 无穷小量 * 有界 无穷小量 简单理解为&#xff1a;0 乘以任何数都等于 0 &#xff0c;因为常数 0 是无穷小量 2. 设 lim f&#xff08;x&#xff09; a , lim g (x) b 加减&#xff1a;lim[f(x) g(x) ] lim f(x) g(x) a b 乘&#xff1a;lim[f(x)…

[Visual Studio] vs 2022中如何创建空白的解决方案

在Visual Studio 2022中创建一个空白的解决方案非常简单。请按照以下步骤操作&#xff1a; 打开Visual Studio。 在启动页面上&#xff0c;选择“创建新的项目”。 在“创建新项目”的对话框中&#xff0c;搜索“空白”。 在中间搜索结果中&#xff0c;选择“空白解决方案”…

同时添加多个的远程桌面工具,Windows远程桌面设置多用户同时登录

Windows Server 版本上的 Windows 远程桌面服务 (RDS) 允许多个用户同时登录。 但是&#xff0c;在标准的Windows桌面版本&#xff08;例如Windows 10&#xff09;上&#xff0c;默认情况下&#xff0c;远程桌面是为单个用户一次登录而设计的。 这被称为“管理远程桌面”模式。…

蓝桥杯2024/1/31----第十届省赛题笔记

题目要求&#xff1a; 1、 基本要求 1.1 使用大赛组委会提供的国信长天单片机竞赛实训平台&#xff0c;完成本试题的程序设计 与调试。 1.2 选手在程序设计与调试过程中&#xff0c;可参考组委会提供的“资源数据包”。 1.3 请注意&#xff1a; 程序编写、调试完成后选手…