经典左旋,指针面试题

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

实现一个函数,可以左旋字符串中的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个字节的空间来做这个tmpstrcpy(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.mzph.cn/news/659546.shtml

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

相关文章

2024美赛数学建模D题思路+模型+代码+论文(持续更新)

2024美赛数学建模A题B题C题D题E题F题思路模型代码论文&#xff1a;开赛后第一时间更新&#xff0c;获取见文末名片 组队环节&#xff1a; 美赛最多是3个人参赛&#xff0c;一般的队伍都是由三人组成&#xff08;当然如果你很大佬也可以一个人参赛&#xff09;&#xff0c;队伍…

力扣hot100 划分字母区间 贪心 思维 满注释版

Problem: 763. 划分字母区间 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 代码随想录 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public List<Integer> partitionLabels(String s){// 创建哈希…

【nginx实战】通过nginx实现http请求的keep alive长连接

文章目录 一. 概述二. nginx与client的长连接1. keepalive_timeout指令2. keepalive_requests指令场景分析 三. 保持和server的长连接1. location设置场景分析 2. upstream设置3. 场景分析场景1&#xff1a;场景2&#xff1a;场景3&#xff1a; 一. 概述 当使用nginx作为反向代…

神经网络的一些常规概念

epoch&#xff1a;是指所有样本数据在神经网络训练一次&#xff08;单次epoch(全部训练样本/batchsize)/iteration1&#xff09;或者&#xff08;1个epochiteration数 batchsize数&#xff09; batch-size&#xff1a;顾名思义就是批次大小&#xff0c;也就是一次训练选取的样…

Vue中使用定义的函数时,无法访问到data()里面的数据

const translateItems1 () > {this.translatedItems this.items1.map(item > {return {...item,label: this.$t(item.labelKey)};}); items1是我们data()里面的数据&#xff0c;无法访问到 解决办法 把箭头函数替换为普通函数 const translateItems1 function() {th…

EXCEL VBA实现重复字段出现次数并列显示

EXCEL VBA实现重复字段出现次数并列显示 Sub dotest() Dim arr, dApplication.ScreenUpdating FalseSet d CreateObject("Scripting.Dictionary")With Sheets("Sheet2")r .Cells(.Rows.Count, "a").End(xlUp).Rowarr .[a1].Resize(r, 1)En…

HTML标签 - 1

文章目录 HTML标签简介HTML书写规范常见网页制作软件常用标签结构标签排版标签标题标签容器标签字体标签文本格式化标签列表标签图片标签 HTML标签 简介 一门使用标记标签来描述网页&#xff0c;展示信息给用户的语言。 超文本标记语言&#xff08;Hyper Text Markup Langua…

保障网络环境清朗与安全:非法关键字过滤的重要性与实现方法

在当今数字化时代&#xff0c;网络已经成为人们获取信息、交流思想的主要平台。然而&#xff0c;随着互联网的普及&#xff0c;一些不法分子也越发倾向于通过网络渠道散布有害信息。为了维护网络环境的清朗与安全&#xff0c;非法关键字过滤技术应运而生。本文将探讨非法关键字…

WMS系统与电商平台快速拉通库存数量

什么是WMS系统 WMS系统是指仓储管理系统&#xff08;Warehouse Management System&#xff09;。它是一种用于管理和控制仓库运营的软件系统。WMS系统通过集成信息技术&#xff0c;提供仓库内货物的存储、出入库、库存管理、订单处理等功能&#xff0c;优化仓库的运作效率和准…

Flask 入门3:Flask 请求上下文与请求

1. 前言 Flask 在处理请求与响应的过程&#xff1a; 首先我们从浏览器发送一个请求到服务端&#xff0c;由 Flask 接收了这个请求以后&#xff0c;这个请求将会由路由系统接收。然后在路由系统中&#xff0c;还可以挂入一些 “勾子”&#xff0c;在进入我们的 viewFunction …

ubuntu22.04 安装conda

要在Ubuntu 22.04上安装Anaconda&#xff0c;可以遵循以下步骤&#xff1a; 首先&#xff0c;打开终端并更新系统包仓库&#xff0c;也需要安装curl工具&#xff0c;这可以通过以下命令完成&#xff1a; sudo apt update && sudo apt install curl -y使用curl命令行工具…

adb 无线连接 操作Android设备

最近集五福活动比较热门 可以用这个工具 用自己擅长的语言写一个循环程序 运行起来就可以 自动帮我们 看视频得福卡了 很方便 while (true) {sleep(mt_rand(15, 25));system(adb shell input swipe 500 2000 500 1000 100); } 1. 首先下载 安卓开发工具 adb adb网盘链接 链接…

Django中的模板

目录 一:基本概念 二&#xff1a;模板继承 在Django中&#xff0c;模板是用于呈现动态内容的HTML文件。它们允许你将动态数据与静态模板结合起来&#xff0c;生成最终的HTML页面。 Django模板使用特定的语法和标签来插入动态内容。你可以在模板中使用变量、过滤器和标签来控…

【HarmonyOS】鸿蒙开发之HTTP网络请求——第5章

HTTP网络请求封装 network/request.ets import { configInterface } from ./type import http from ohos.net.http import { getToken } from ../utils/storage//网络请求封装 export const request (config:configInterface)>{let httpRequest:http.HttpRequest http.c…

Python爬虫存储库安装

如果你还没有安装好MySQL、MongoDB、Redis 数据库&#xff0c;请参考这篇文章进行安装&#xff1a; Windows、Linux、Mac数据库的安装&#xff08;mysql、MongoDB、Redis&#xff09;-CSDN博客 存储库的安装 上节中&#xff0c;我们介绍了几个数据库的安装方式&#xff0c;但…

IDEA 取消参数名称提示、IDEA如何去掉变量类型提醒

一、IDEA 取消参数名称显示 取消显示形参名提示 例如这样的提示信息 二、解决方法 1、File—>Setting–>Editor—>Inlay Hints—>Java 去掉 Show Parameter hints for 前面的勾即可&#xff0c;然后Apply—>Ok 2、右键Disable Hints

Go语言基础之函数

1. golang函数特点&#xff1a; • 无需声明原型。• 支持不定 变参。• 支持多返回值。• 支持命名返回参数。 • 支持匿名函数和闭包。• 函数也是一种类型&#xff0c;一个函数可以赋值给变量。• 不支持 嵌套 (nested) 一个包不能有两个名字一样的函数。• 不支持 重载 (ov…

强敌环伺:金融业信息安全威胁分析——整体态势

从早期的Zeus和其他以银行为目标的特洛伊木马程序&#xff0c;到现在的大规模分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;再到新颖的钓鱼攻击和勒索软件&#xff0c;金融服务业已成为遭遇网络犯罪威胁最严重的行业之一。金融服务业的重要性不言而喻&#xff0…

【C语言】(14)结构体

结构体是C语言中一种允许将多个不同类型的数据项组合成一个单一的复合类型的数据结构。通过结构体&#xff0c;可以更加方便地管理和组织复杂的数据。 1. 结构体的定义 结构体通过关键字 struct 定义。结构体定义不会占用内存空间&#xff0c;它只是定义了一个模板。 struct…

H12-821_320

320.关于VRRP slave设备的描述,正确的是 A.当收到优先级为0的VRRP报文时,Slave会直接切换为 Master B.slave响应目的IP地址为虚拟IP地址的IP报文 C.当slave收到 Master发送的VRRP报文时,可判断 Master的状态是否正常 D.slave会丢弃目的MAC地址为虚拟MAC地址的IP报文 答案&#…