C++程序员笔试训练

面试题1:使用库函数将数字转换位字符串

  • 考点:c语言库函数中数字转换位字符串的使用

在这里插入图片描述

char *gcvt(double number, int ndigit, char *buf);

参数说明:

number:待转换的double类型数值。
ndigit:保留的小数位数。
buf:用于存储转换后的字符串的缓冲区。

  • 示例代码如下
void func()
{int numInt = 1333;double numDouble = 123.12;char strInt[20];char strDouble[20];char buffer[20];_itoa(numInt, strInt, 10);_gcvt(numDouble, 5, strDouble);sprintf(buffer, "%d", numInt);cout << strInt << endl;cout << strDouble << endl;cout << buffer << endl;}

面试题2:不使用库函数将整数转换为字符串

  • 考点:对数字转换为字符串,相关ASCII码的理解

解题思路:将整数的每一位上加上’0’转换成char类型并存到字符数组中

void func()
{int number = 12333;char str[20];int count = 0;while (number){int num = number % 10;str[count++] = num + '0';number = number / 10;}//对顺序进行调整char newstr[20];for (int i = 0; i < count; i++){newstr[i] = str[count - 1 - i];}newstr[count] = '\0';cout << newstr << endl;}

面试题3:编程实现strcpy函数

  • 考点:字符串复制的实现
    在这里插入图片描述
  • 示例代码如下
char* My_strcpy(char* strDest, const char* strSrc)
{int strSrc_len=strlen(strSrc);for (int i = 0; i < strSrc_len; i++){strDest[i] = strSrc[i];}strDest[strSrc_len] = '\0';return strDest;
}int getStrLen(const char* strSrc)
{int len = 0;while (*strSrc++ != '\0'){len++;}return len;
}int main()
{char strSrc[] = "abcdefg";char strDest[20];int len = 0;len=getStrLen( My_strcpy(strDest, strSrc));cout << strDest << endl;cout << "len=" << len << endl;system("pause");return 0;
}

在这里插入图片描述

面试题4:编程实现memcpy函数

  • 内存复制的实现
void *memcpy(void *dest, const void *src, size_t n);

其中,dest是目标地址,src是源地址,n是要复制的字节数。

memcpy函数可以用来复制任意长度的内存数据,但注意对于复杂数据类型(如结构体、类等),要确保其成员的内存布局是连续的,否则可能会导致数据被破坏。

  • 示例代码如下
void* memcpy2(void *dest,const void *src,size_t size)
{assert((dest != NULL) && (src != NULL));//强制转换char* newDest = (char*)dest;char* newSrc = (char*)src;while (size-- > 0){*newDest++ = *newSrc++;}return newDest;
}int main()
{char src[] = "asdfghjk";char dest[20];int len=strlen(src);memcpy2(dest, src, len);dest[len] = '\0';cout << dest << endl;system("pause");return 0;
}

面试题5:strcpy与memcpy的区别

  • strcpy和memcpy都是用来复制内存区域的函数,但是二者之间有几个关键的区别:
  1. strcpy用于复制字符串,其原型为char* strcpy(char* dest, const char* src)。它会从源字符串的地址开始复制字符,直到遇到空字符\0为止。因此,strcpy只能用来复制字符串,并且不需要指定复制的长度。

  2. memcpy用于复制任意类型的内存数据,其原型为void* memcpy(void* dest, const void* src, size_t n)。它需要传入要复制的数据的起始地址和长度,可以复制任意类型的数据,包括字符串。因此,memcpy是更通用的函数,可以处理任意类型的数据。

  3. strcpy会在目标字符串的末尾添加\0结束符,而memcpy则不会。因此,在使用memcpy复制字符串时,需要手动添加结束符。

  • 总的来说,strcpy主要用于复制字符串,而memcpy用于复制任意类型的内存数据。在复制字符串时,可以使用strcpy来保证字符串的正确复制及添加结束符。

面试题6:编程实现字符串的长度

  • 考点:strcpy库函数的实现细节

解题思路:以字符串的结束符’\0’作为标志,做一次遍历即可

int strlen1(const char*str)
{assert(NULL != str);int len = 0;while (*str++ != '\0'){len++;}return len;}int strlen2(const char* str)
{assert(str != NULL);const char* temp = str;while (*str++ != '\0');return str - temp - 1;
}int main()
{char str[] = "asdfghjkl";//const char* str = NULL;cout << "len1=" << strlen1(str) << endl;cout << "len2=" << strlen2(str) << endl;system("pause");return 0;
}

在这个函数中,temp是一个指向字符串开头的常量字符指针,而str是一个指向字符串结尾的字符指针(指向空字符’\0’的位置)。

当str逐个递增直到遇到空字符’\0’时,str指针的位置就指向了字符串的结尾。然后,通过计算str - temp可以得到字符串的长度,但是由于字符串的长度不包括空字符’\0’本身,所以需要减去1才能得到正确的长度。
因此,str - temp - 1的结果是字符串的实际长度,去除了末尾的空字符’\0’。

  • 重点:strlen2的效率是高于strlen1的,strlen1每次循环自增两次,而strlen2每次循环自增一次。

面试题7:编程实现字符串中子串的查找

  • 考点:strstr库函数的实现细节

请写一个函数,实现strstr,即从一个字符串中,查找另一个字符串的位置,如strstr(“12345”,“34”)返回值是2号位置找到字符串34

char *strstr(const char *haystack,const char *needle);
strstr()会从字符串 haystack 中搜寻字符串 needle,并将第一次出现的地址返回。

  • 解题思路:暴力解,直接从首字母开始遍历
char* my_strstr(const char* haystack, const char* needle)
{while (*haystack!='\0'){char* stack = (char*) haystack;char* need  = (char*) needle;while (*stack++ == *need++){if (*need!='\0'){return (char*)haystack;}}haystack++;}return (char*)haystack;
}int main()
{char str1[] = "12345";char str2[] = "34";cout << "dest=" << my_strstr(str1, str2);system("pause");return 0;
}

面试题8:设置或清除特定的位

  • 考点:使用位操作符&和|
    嵌入式系统总是要求用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a的bit 3.再以上的两个操作中,要保持其他位不变。
#define BIT3 (ox1<<3)
static int a;void set_bit3(void)
{a|=BIT3;
}void clear_bit3(void)
{a &= ~BIT3;
}

面试题9:列举并解释c++中的4种运算符转化以及它们的不同点

  • 考点:位运算的灵活使用
  1. const_cast操作符:为程序设计师再特殊的情况下将限制为const成员函数的const定义解除,使其能更改特定属性。
  2. dynamic_cast操作符:可以将一个基类指针指向不同的子类型(派生类),然后将被转型为基础类的对象还原成原来的类。不过,限定于对象指针的类型转换,而非对象变量。
  3. rintrpret cast 操作符:将一个指针转换成其他类型的指针,新类型的指针与旧指针可以毫不相关。通常用于某些非标准的指针数据类型转换,例如将void* 转换为 char* 。它也可以用在指针和整型数之间的类型转换上。注意:它存在潜在的危险,除非有使用它的充分理由,否则就不要使用它。例如,它能够将一个 int* 类型的指针转换为 float* 类型的指针,但是这样就会很容易造成整数数据不能被正确地读取。
  4. static. cast操作符:它能在相关的对象和指针类型之间进行类型转换。有关的类之间必须通过继承、构造函数或者转换函数发生联系。static_cast 操作符还能在数字(原始的)类型之间进行类型转换。通常情况下,statie_cast 操作符大多用于将数域宽度较大的类型转换为较小的类型。当转换的类型是原始数据类型时,这种操作可以有效地禁止编译器发出

面试题10:编写类String的构造函数,析构函数和赋值函数

  • 考点:构造函数,析构函数和赋值函数的编写方法
    已知类String的原型为:
class String
{
public:String(const char* str = NULL);//普通构造函数String(const String& other);//拷贝构造函数~String();//析构函数String& operator =(const String& other);//赋值函数private:char* m_String;
};//实现如下-----------------------------------------------------String::String(const char* str)
{if (str == NULL){m_String = new char[1];*m_String = '\0';}else{m_String = new char[strlen(str) + 1];strcpy(m_String, str);}
}String::String(const String& other)
{m_String = new char[strlen(other.m_String) + 1];strcpy(m_String, other.m_String);}String& String::operator =(const String& other)
{if (this == &other){return *this;}delete[] m_String;m_String = new char[strlen(other.m_String) + 1];strcpy(m_String, other.m_String);return *this;
}String::~String()
{if (m_String == NULL){return;}delete[] m_String;
}

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

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

相关文章

Character Animator 2024 mac/win版:赋予角色生命,动画更传神

Character Animator 2024是一款强大的角色动画制作软件&#xff0c;以其创新的功能和卓越的性能&#xff0c;为动画师、游戏开发者以及设计师们带来了全新的创作体验。 Character Animator 2024 mac/win版获取 这款软件采用了先进的骨骼绑定技术&#xff0c;使得角色动画的制作…

支持向量机 (SVM) 算法详解

支持向量机 (SVM) 算法详解 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种监督学习模型&#xff0c;广泛应用于分类和回归分析。SVM 特别适合高维数据&#xff0c;并且在处理复杂非线性数据时表现出色。本文将详细讲解 SVM 的原理、数学公式、应用场景…

一种基于非线性滤波过程的旋转机械故障诊断方法(MATLAB)

在众多的旋转机械故障诊断方法中&#xff0c;包络分析&#xff0c;又称为共振解调技术&#xff0c;是目前应用最为成功的方法之一。首先&#xff0c;对激励引起的共振频带进行带通滤波&#xff0c;然后对滤波信号进行包络谱分析&#xff0c;通过识别包络谱中的故障相关的特征频…

电商API接口详述:涵盖订单、库存等多功能接口介绍

电商商家自研管理系统&#xff0c;线下ERP系统或WMS系统想要接入电商平台订单打单发货&#xff0c;通过点三电商API可以一键对接多个电商平台&#xff0c;帮助商家、ERP/WMS服务商快速开发电商模块&#xff0c;实现电商业务管理功能&#xff0c;那么点三电商API接口有哪些可用接…

vue+webrtc(腾讯云) 实现直播功能 pc端+移动端

Websocket实现私聊和群聊 1. websocket的概念 1.1. 全双工概念2. websocket实现聊天室 2.1. WebSocket API 2.1.1. 构造方法 2.1.1.1. 语法2.1.1.2. 参数2.1.1.3. 抛出异常2.1.2. 常量2.1.3. 属性2.1.4. 方法2.1.5. 事件3. websocket实现群聊或私聊或图片发送 3.1. 项目的最终…

React+TS前台项目实战(七)-- 全局常用组件Select封装

文章目录 前言Select组件1. 功能分析2. 代码详细注释说明3. 使用方式4. 效果展示&#xff08;1&#xff09;鼠标移入效果&#xff08;2&#xff09;下拉框打开效果&#xff08;3&#xff09;回调输出 总结 前言 今天这篇主要讲全局select组件封装&#xff0c;可根据UI设计师要…

188. 买卖股票的最佳时机 IV

188. 买卖股票的最佳时机 IV 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;代码解释类级变量与初始化动态规划初始化递归函数 dfs_maxProfit Integer.MIN_VALUE / 5 的作用总结 参考代码&#xff1a;_188买卖股票的最佳时机IV 错误经验吸取 原题链接&#xf…

全面升级,票据识别新纪元:合合信息TextIn多票识别2.0

票据识别 - 自动化业务的守门员 发票、票据识别&#xff0c;是OCR技术和RPA、CMS系统结合的一个典型场景&#xff0c;从覆盖率、覆盖面的角度来说&#xff0c;应该也是结合得最成功的场景之一。 产品简介 国内通用票据识别V2.0&#xff08;简称“多票识别2.0”&#xff09;是…

Java 集合框架详谈及代码分析(Iterable->Collection->List、Set->各接口实现类、Map->各接口实现类)

目录 Java 集合框架详谈及代码分析&#xff08;Iterable->Collection->List、Set->各接口实现类、Map->各接口实现类&#xff09;1、集合概述1-1&#xff1a;Java 集合概述1-2&#xff1a;List、Set、Map 三者的区别&#xff1f;1-3&#xff1a;集合框架底层数据结…

SM4 国密——加密,解密

SM4 国密的使用 前言——引用管理包SM4解密——ECB模式SM4加密——ECB模式SM4解密——CBC模式SM4加密——CBC模式SM4工具类SM4主体类SM4实体类 前言——引用管理包 引用NuGet管理包BouncyCastle.Crypto SM4解密——ECB模式 public string CiphertextParsing(string json) {tr…

四十八、openlayers地图调色总结——锐化、模糊、浮雕滤镜,调整地图色相、饱和度、亮度

这篇是对滤镜的总结&#xff0c;方便工作中直接使用。 想要调整图层的颜色&#xff0c;有两种方法。 方法一&#xff1a; 加载图层时使用tileLoadFunction函数拿到context添加canvas滤镜效果。 this.imagery new TileLayer({source: new XYZ({url: "https://server.arc…

android串口助手apk下载 源码 演示 支持android 4-14及以上

android串口助手apk下载 1、自动获取串口列表 2、打开串口就开始接收 3、收发 字符或16进制 4、默认发送at\r\n 5、android串口助手apk 支持android 4-14 &#xff08;Google seral port 太老&#xff09; 源码找我 需要 用adb root 再setenforce 0进入SELinux 模式 才有权限…

关于docker无法正常下载镜像的问题

文章目录 之前还可以正常下载镜像&#xff0c;但是一段时间之后就无法下载了&#xff0c;猜测可能是政治原因&#xff0c;无法连接到国外服务器&#xff0c;所以我设置了阿里云的镜像加速器。 配置方法如下&#xff1a; 前往阿里云&#xff08;https://help.aliyun.com/zh/acr/…

理解HTTP请求格式

HTTP概念 HTTP全称HyperTextTransfer Protocol(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议&#xff1b;HTTP是一个客户端&#xff08;用户&#xff09;和服务端&#xff08;网站&#xff09;之间请求和响应的标准。 HTTP 协议是以 ASCII 码传输&…

Ethena 更新代币经济学,逼着空投用户作长期 Hodler?

撰文&#xff1a;Yangz&#xff0c;Techub News 本文来源香港Web3媒体Techub News 6 月 18 日&#xff0c;Ethena 更新代币经济学&#xff0c;计划在 Ethena 生态和即将推出的 Ethena Chain 中引入通用再质押机制&#xff0c;并对任何通过空投获得 ENA 的用户实施「锁定」要求…

【黑马TS】学习资料Day4

五、在 React 中使用 TypeScript 现在&#xff0c;我们已经掌握了 TS 中基础类型、高级类型的使用了。但是&#xff0c;如果要在前端项目开发中使用 TS&#xff0c;还需要掌握 React、Vue、Angular 等这些库或框架中提供的 API 的类型&#xff0c;以及在 TS 中是如何使用的。 …

基于Redis提高查询性能(保持数据一致性)

Redis实战篇 | Kyles Blog (cyborg2077.github.io) 目录 背景 商户查询缓存(根据ID查询&#xff09; 根据店铺类型查询&#xff08;List型&#xff09; 缓存更新策略&#xff08;保证数据一致性&#xff09; 案例&#xff08;利用缓存更新策略&#xff09; 背景 起初客户端…

Hadoop3:MapReduce中的Shuffle机制

一、流程图 Shuffle是Map方法之后&#xff0c;Reduce方法之前的数据处理过程称。 二、图解说明 1、数据流向 map方法中context.write(outK, outV);开始&#xff0c;写入环形缓冲区&#xff0c;再进行分区排序&#xff0c;写到磁盘 reduce方法拉取磁盘上的数据&#xff0c;…

JavaSE 面向对象程序设计高级 方法引用 2024详解

在编程中&#xff0c;方法引用&#xff08;Method Reference&#xff09;是一种技术&#xff0c;它让你能够直接引用一个现有的函数或方法&#xff0c;而无需通过对象实例来调用。这种方法在函数式编程和高阶函数中非常有用&#xff0c;因为它提供了简洁的方式来传递函数行为&a…

【归档】maven的使用

学习自波波酱老师SSM企业级框架最全教学视频 maven篇 maven的设置 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…