函数的模拟实现

题一:

模拟实现strncpy 

#include <stdio.h>


void my_strncpy(char* arr2, char* arr1, size_t num)

{

	int i = 0;

	for (i = 0; i < num; i++)

	{

		*(arr2 + i) = *(arr1 + i);

	}

}

int main()

{

	char arr1[] = "hello liangzai";

	char arr2[10] = { 0 };

	//strncpy(arr2,arr1,sizeof(arr2));

	my_strncpy(arr2, arr1, sizeof(arr2));


	return 0;

}

优解一:

char * mystrncpy(char * dst, const char * src, size_t n)
{
	int i;
  for (i = 0; src[i] && i < n; i++)
  {
    dst[i] = src[i];
  }
   
  if (i < n)
  {
  	dst[i] = 0;
  }
  return dst;
}

题二:

模拟实现strncat

#include <stdio.h>

#include <string.h>


char* my_strncat(char* arr1, const char* arr2, size_t num)

{

	int sz = strlen(arr1);

	int i = 0;

	for (i = 0; i < num; i++)

	{

		*(arr1 + sz + i) = *(arr2 + i);

	}

	return arr1;

}


int main()

{

	char arr2[] = "shawanyi ";

	char arr1[20] = "hello ";

	//strncat(arr1,arr2,10);

	my_strncat(arr1, arr2, 10);


	return 0;

}

优解一:

char * mystrncat(char * dst, const char * src, size_t n)
{
	char * tmp = dst;
   
  while (*dst)
  {
    dst++;//记录到dst最后一个位置
  }
   
  int i;
  for (i = 0; src[i] && i < n; i++)
  {
    dst[i] = src[i];
  }
   
  dst[i] = 0;
  return tmp;
}

题三:

模拟实现atoi

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

#include <ctype.h>



int my_atoi(const char* arr1)

{

	assert(arr1);

	int sum = 0;

	if (*(arr1) == '\0')

	{

		return 0;

	}

	while(isspace(*arr1))

	{

		arr1++;

	}

	int flat = 1;

	if (*arr1 == '+')

	{

		arr1++;

	}

	else if (*arr1 == '-')

	{

		flat = -1;

		arr1++;

	}

	int ret = 0;

	while (isdigit(*arr1))

	{

		ret = ret * 10 + (*arr1 - '0');

		if (ret > INT_MAX)

		{

			return INT_MAX * flat;

		}

		else if (ret < INT_MIN)

		{

			return INT_MIN * flat;

		}

		arr1++;

	}

	if (isdigit(*arr1) == 0)

	{

		return ret * flat;

	}

	return ret*flat;

}


int main()

{

	char arr1[] = "-123666a44";

	//int n = atoi(arr1);

	int sz = 0;

	sz = my_atoi(arr1);

	return 0;

}

优解一

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
//VALID 表示结果合法
//INVALID 表示结果非法
enum State
{
 VALID,//0
 INVALID//1
};
//默认结果可能非法,当正确转换后再改为合法
enum State state = INVALID;
​
int my_atoi(char *str)
{
 int flag = 1;
 long long ret = 0;
 assert(str);
 state = INVALID;
  //跳过空白字符
 while(isspace(*str))
 {
  str++;
 }
 if(*str == '\0')
 {
  return 0;
 }
  //跳过正负号
 if(*str == '+')
 {
  str++;
 }
 else if(*str == '-')
 {
  flag = -1;
  str++;
 }
  //开始转换数字字符直到非数字字符
 while(isdigit(*str))
 {
  ret = ret * 10 + flag * (*str-'0');
  if((ret > INT_MAX) || (ret < INT_MIN))
  {
   return 0;
  }
  str++;
 }
  //正常停止
 if(*str == '\0')
 {
  state = VALID;
  return (int)ret;
 }
 else
 {
    //遇到非数字字符
  return (int)ret;
 }

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

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

相关文章

【Spring Boot】构建RESTful服务 — 使用Swagger生成Web API文档

使用Swagger生成Web API文档 高质量的API文档在系统开发的过程中非常重要。本节介绍什么是Swagger&#xff0c;如何在Spring Boot项目中集成Swagger构建RESTful API文档&#xff0c;以及为Swagger配置Token等通用参数。 1.什么是Swagger Swagger是一个规范和完整的框架&…

怎么快速搭建BI?奥威BI系统做出了表率

搭建BI系统有两大关键&#xff0c;分别是环境搭建和数仓建设。这两点不管是哪一个都相当地费时费力&#xff0c;那要怎么才能快速搭建BI平台&#xff0c;顺利实现全企业数字化运营决策&#xff1f;奥威BI系统方案&#xff0c;你值得拥有&#xff01; 奥威BI系统方案&#xff0…

12.Eclipse导入Javaweb项目

同事复制一份他的项目给我ekp.rar (懒得从SVN上拉取代码了)放在workspace1目录下 新建一个文件夹 workspace2,Eclipse切换到workspace2工作空间 选择Import导入 选择导入的项目(这里是放到workspace1里面) 拷贝一份到workspace2里面 例子 所有不是在自己电脑上开发的web项目…

haproxy基本编译环境部署

前提&#xff1a;haproxy支持基于lua实现功能扩展&#xff08;需要安装比较新的lua语言&#xff0c;方便进行haproxy编译&#xff09;。 wget http://www.lua.org/ftp/lua-5.3.5.tar.gz lua -v # 检查环境 yum list lua # 查看可以安装环境 同时还需要gcc&#xff0c;gcc-c&…

Transformer(一)简述(注意力机制,NLP,CV通用模型)

目录 1.Encoder 1.1简单理解Attention 1.2.什么是self-attention 1.3.怎么计算self-attention 1.4.multi-headed 1.5.位置信息表达 2.decorder&#xff08;待补充&#xff09; 参考文献 1.Encoder 1.1简单理解Attention 比方说&#xff0c;下图中的热度图中我们希望专注于…

基础篇-环境搭建

JDK安装 https://www.oracle.com/java/technologies/downloads/ 安装完成后&#xff0c;一直点下一步就行 打开控制面板输入cmd运行&#xff0c;控制台输入java -version。如果看到版本号就说明我们安装成功了 JDK的组成 1. JVM JAVA虚拟机&#xff0c;JAVA真正运行的地方 …

喜报!诚恒科技与赛时达科技达成BI金蝶云星空项目合作

随着全球数字化浪潮轰轰烈烈袭来&#xff0c;仅仅凭借手工处理的方式难以在庞大的数据海洋中精准获取信息、把握市场需求、了解目标用户&#xff0c;为企业创新提供强有力的支持。深圳赛时达科技有限公司&#xff08;简称赛时达科技&#xff09;希望通过数字化转型实现从手工处…

虚拟世界探索:科技之下的未来可能性

随着科技的飞速发展&#xff0c;人们对于虚拟世界的憧憬和探索也日益加深。虚拟世界&#xff0c;那是一个超越现实的概念&#xff0c;一个充满想象力和创造力的领域。然而&#xff0c;虚拟世界究竟有可能实现吗&#xff1f;这是一个引人深思的问题。 虚拟世界&#xff0c;首先让…

SQL | 高级数据过滤

5-高级数据过滤 通过组合WHERE子句&#xff0c;建立功能更强的检索语句。 5.1-组合WHERE子句 前面写的都是单一条件下的WHERE子句&#xff0c;SQL语句允许给出多个WHERE子句来组合检索&#xff0c;这些WHERE子句通过AND子句或者OR子句进行连接。 操作符&#xff08;operato…

【数据结构与算法】稀疏数组

文章目录 一&#xff1a;为什么会使用稀疏数组1.1 先看一个实际的需求1.2 基本介绍1.2.1 稀疏数组的处理方法1.2.2 数组的举例说明1.2.3 应用实例1.2.4 整体思路分析二维数组转稀疏数组的思路稀疏数组转原始的二维数组的思路 二&#xff1a;代码实现2.1 创建一个原始的11*11二维…

每天一道leetcode:剑指 Offer 12. 矩阵中的路径(中等DFS深度优先遍历)

今日份题目&#xff1a; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元…

HCIA---动态路由---RIP协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 前言 一.动态路由 二.动态路由协议分类 IGP&#xff1a;内部网关协议 EGP:外部网关协议 三.RIP协议概述 RIP版本分类&#xff1a; RIP三要素&#xff1a; 思维…

全景图!最近20年,自然语言处理领域的发展

夕小瑶科技说 原创 作者 | 小戏、Python 最近这几年&#xff0c;大家一起共同经历了 NLP&#xff08;写一下全称&#xff0c;Natural Language Processing&#xff09; 这一领域井喷式的发展&#xff0c;从 Word2Vec 到大量使用 RNN、LSTM&#xff0c;从 seq2seq 再到 Attenti…

【计算机网络】12、frp 内网穿透

文章目录 一、服务端设置二、客户端设置 frp &#xff1a;A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet。是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且…

SQL Server Reporting Services 报错:报表服务器无法访问服务帐户的私钥

解决这个问题&#xff0c;有小伙伴提到可以使用命令 exec DeleteEncryptedContent 但这对这边的环境时行不通的&#xff0c;我在【服务账户】的配置和【数据库】的配置中到使用了域账户&#xff0c;试了几次都不行。改成使用内置账户就好了。具体原因还没扒拉&#xff08;欢迎…

4-5-tablewidget

文章目录 添加控件&#xff0c;添加行列数widget.cppwidget.h效果 添加控件&#xff0c;添加行列数 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this)…

linux和C++中的 线程同步与线程安全 对比

线程同步与线程安全 线程进程与线程的区别并发和并行的区别linux线程常用接口函数函数定义函数使用 多线程理解 线程同步五个线程同时启动&#xff0c;每一个循环打印3次五个线程&#xff0c;每一个循环1000 结果是<5000代码和测试结果测试结果分析可以用信号量和互斥锁解决…

一文走进时序数据库性能测试工具 TSBS

一、背景 在物联网、车联网等时序数据场景中&#xff0c;数据的高速写入能力至关重要&#xff0c;会对产品方案的可用性、可靠性和扩展性产生影响。 以物联网为例&#xff0c;当面临千万甚至上亿设备、平均每个设备采集几十个到几百个指标时&#xff0c;每秒生成的数据将达到…

vue3 setup+Taro3 调用原生小程序自定义年月日时分多列选择器,NutUI改造

vue3 setupTaro3 调用原生小程序自定义年月日时分多列选择器&#xff0c;NutUI改造 NutUI 有日期时间选择器&#xff0c;但是滑动效果太差&#xff0c;卡顿明显。换成 原生小程序 很顺畅 上代码&#xff1a; <template><view><pickermode"multiSelector&…