经典左旋,指针面试题

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

实现一个函数,可以左旋字符串中的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.mfbz.cn/a/363017.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能网络安全挑战赛(AIxCC):超亿元大奖等你来拿!

2023年底&#xff0c;DARPA开启了一项前所未有的挑战——人工智能网络安全挑战赛&#xff08;AIxCC&#xff09;&#xff0c;旨在通过技术竞赛探索AI时代下网络安全的新格局。该赛事希望孕育出一种创新的网络安全通用人工智能&#xff08;AGI&#xff09;系统&#xff0c;该系统…

从0到1入门C++编程——06 类和对象之多态、文件操作

文章目录 多态1.多态基本概念2.多态案例——计算器3.纯虚函数和抽象类4.多态案例——制作饮品5.虚析构和纯虚析构6.多态案例——电脑组装 文件操作1.文本文件--写文件2.文本文件--读文件3.二进制文件--写文件4.二进制文件--读文件 多态 1.多态基本概念 多态是C面向对象的三大…

阿里云 DMS 执行sql变更

数据库开发-数据变更-无锁变更 选择数据库&#xff1a;比如要更新生产库&#xff0c;搜索生产库名字。 填入变更sql。

实现两栏布局和三栏布局的多种详细方法

目录 一、背景两栏布局三栏布局 二、两栏布局flex弹性布局 三、三栏布局两边使用 float&#xff0c;中间使用 margin两边使用 absolute&#xff0c;中间使用 margin两边使用 float 和负 margin使用 display: table 实现使用flex实现grid网格布局 参考文献 一、背景 在日常布局…

AI大模型专题:大模型赋能座舱,智能座舱新战场

今天分享的是AI大模型系列深度研究报告&#xff1a;《AI大模型专题&#xff1a;大模型赋能座舱&#xff0c;智能座舱新战场》。 &#xff08;报告出品方&#xff1a;国泰君安证券&#xff09; 报告共计&#xff1a;19页 大模型技术将给予智能座舱一次深度进化 拥抱大模型技术…

vue 打包下载多层zip文件

npm install jszip npm install file-saverimport JSZip from "jszip"; import FileSaver from "file-saver"; import {Message} from "view-design";/*** 下载文件 传数组* fileList* [* {* type:file,* name:17034953113790548.png,…

ubuntu22.04@laptop安装配置VNC服务端

ubuntu22.04laptop安装&配置VNC服务端 1. 源由2. 系统安装3. VNC安装3.1 系统更新3.2 lightdm安装3.3 x11vnc安装3.4 x11vnc配置3.5 x11vnc自启动3.6 x11vnc状态查询 4. 演示视频5. 附录 - “Failed to start x11vnc service.” 1. 源由 最近系统搞TensorFlow, OpenCV, Py…

免费的ppt网站分享

前言 相信大学生们深有体会&#xff0c;对于学校而言&#xff0c;好像是任何活动都需要我们做ppt&#xff0c;当你拿着自己辛苦做的ppt去展示现场的时候&#xff0c;你看到别人的ppt比你的还好&#xff0c;此时心情就是毙&#xff0c;当你知道人家不过是仅仅的1个小时不到就完成…

本地搭建Plex私人影音网站并结合内网穿透实现公网远程访问

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【数据库数据恢复】Oracle数据库ASM磁盘组数据恢复案例

oracle数据库故障&分析&#xff1a; oracle数据库ASM磁盘组掉线&#xff0c;ASM实例不能挂载。数据库管理员尝试修复数据库&#xff0c;但是没有成功。 oracle数据库数据恢复过程&#xff1a; 1、将oracle数据库所涉及磁盘以只读方式备份。后续的数据分析和数据恢复操作都…

QT中QComboBox添加点击事件,实现下拉框自动刷新

因为项目需要&#xff0c;在QT中的ui界面添加QComboBox控件&#xff0c;需求是实现控件的点击事件&#xff0c;查了资料&#xff0c;发现这个控件类的本身是没有点击信号可以使用的。 但是QT是基于C的面向对象&#xff0c;有了这个特点&#xff0c;我们就可以继承原来的类&…

QSS样式表简单梳理记录

1.带namespace的类&#xff0c;样式表写法&#xff1a; // 命令空间LW&#xff0c;类名Demo LW--Demo {background-color: rgba(0, 0, 0, 0.5); } 2.带状态的类&#xff0c;样式表写法&#xff1a; // 类名Demo&#xff0c;状态current Demo[current"true"] {back…

Java基础 集合(二)List详解

目录 简介 数组与集合的区别如下&#xff1a; 介绍 AbstractList 和 AbstractSequentialList Vector 替代方案 Stack ArrayList LinkedList 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界…

Redis 布隆过滤器

布隆过滤器 这一篇文章主要是记录布隆过滤器的使用和认识 主要参考了如下的blog https://blog.csdn.net/weixin_42972832/article/details/131211665 他讲的还不错 简单的来说,布隆过滤器,实际上就像是一个集合,拿redis的key来举例来说,布隆过滤器的设置就是去过滤不属于redi…

static 成员函数

在书上看到这样一段话 ”在引入static 成员函数之前&#xff0c;C语言要求所有的成员函数都必须经由该 class 的对象来调用。而实际上&#xff0c;只有当一个或多个 nonstatic 数据成员在成员函数中被直接存取时&#xff0c;才需要 class 的对象。class 对象提供了 this 指针来…

C#版字节跳动SDK - SKIT.FlurlHttpClient.ByteDance

前言 在我们日常开发工作中对接第三方开放平台&#xff0c;找一款封装完善且全面的SDK能够大大的简化我们的开发难度和提高工作效率。今天给大家推荐一款C#开源、功能完善的字节跳动SDK&#xff1a;SKIT.FlurlHttpClient.ByteDance。 项目官方介绍 可能是全网唯一的 C# 版字…

C语言简介

Visual Studio编辑器左侧菜单栏不小心关掉如何打开&#xff08;左侧解决方案资源管理器不显示如何打开&#xff09;、C语言中int main和void main的区别以及C工程的创建_visual studio2022 资源管理器怎么打开桌面面板-CSDN博客 目录 ​编辑 1. 简介 2. 介绍 3. C程序 …

保姆式挑选钢化膜教程,不看真的后悔

覆盖率 我们怎样挑选钢化膜呢&#xff1f;选手机膜最重要的是看它的覆盖率&#xff0c;所谓覆盖就是手机膜覆盖住你的手机屏幕&#xff0c;一般覆盖率达到 97% 左右&#xff0c;几乎就感受不到膜的存在。 很多朋友应该听说过 2D 钢化膜&#xff0c;它是没有经过边缘抛光处理的…

Django部署到服务器后无法获取到静态元素 The requested resource was not found on this server

问题描述 写了一个Django项目&#xff0c;部署到云主机后&#xff0c;访问发现图片无法访问&#xff0c;报错The requested resource was not found on this server 图片是一个词云图&#xff0c;根据爬虫爬取的信息生成的&#xff0c;根据爬取的信息会改变&#xff0c;所以没…

负责任的老师都具备哪些特点

选择成为一名教师时&#xff0c;就承诺要为学生提供最好的教育。但是&#xff0c;什么是最好的教育呢&#xff1f;我认为&#xff0c;一个负责任的老师应该具备以下几个特点&#xff1a; 了解学生 作为老师&#xff0c;我们首先要了解自己的学生。每个学生都是独特的个体&…