【C语言函数实现节选1】

news2024/12/27 13:07:57

前言:

         通过前面的博客,C语言基本知识基本上我已给大家分享完成!接下来我会通过两篇博客结

合前面的知识实现一下常见的函数。实现方式不唯一,大家只要大体思路符合都是可以的,在学习

的过程中尽量自己先实现,实现完成之后再对照我的思路进行再实现,然后回过头再进行对照一遍。

       C语言大家已经学习好一段时间,接下来大家争取再消化一下,自己多敲一下代码,找一下练

习题。不要急于求成,入门和基础是非常重要的。有些知识要大家反复的去琢磨,通过敲代码进行

推敲验证。后面数据结构的学习我也会继续更新为大家分享相关知识点的总结。

1.strlen 函数的模拟实现

函数原型 -----size_t strlen ( const char * str )

 思路:      函数的功能是求字符串长度,所以我们需要遍历字符串的每个字符并计数,最后将返回

值返回。传地址时我们不需要修改其所指向的对象,所以用const进行维护。

#include <stdio.h>
#define n 100
size_t my_strlen(const char* p)
{
	int count = 0;
	while (*p++)
		count++;
	return count;
}
int main()
{
	char arr[n];
	gets(arr);
	printf("%d\n",my_strlen(arr));
	return 0;
}

2.strcpy 函数的模拟实现

函数原型----char * strcpy ( char * destination, const char * source )

函数功能: 该函数的作用是将原字符串中的内容拷贝到目标字符串中(包括终止字符)。它的返

回值是char*,即就是目标字符串的地址。

思路:      先将目标字符串的地址保存下来,再逐个进行拷贝,最后返回目标字符串的地址。

#include <stdio.h>
#include <assert.h>
#define N 100
char* my_strcpy(char* dest, const char* sour)
{
	assert(dest&&sour);
	char* ret = dest;
	while (*dest++ = *sour++)   //这样设计是非常巧妙的,完成了拷贝也起到终止条件的作用
		;
	return ret;
}
int main()
{
	char arr1[N] = "abcdef";
	char arr2[N];
	char* ret = my_strcpy(arr2, arr1);
	printf("%s\n", ret);
	return 0;
}

3.strcat 函数模拟实现

函数原型---char * strcat ( char * destination, const char * source )

 函数功能:strcat 函数是 C 语言中的字符串连接函数,用于将一个字符串连接到另一个字符串的

末尾。返回值为目标字符串的地址。

思路:先将目标字符串的地址保存下来,其次先找目标字符串的尾部,在进行尾部拷贝连接,最后

返回目标字符串的地址。

#include <stdio.h>
#include <assert.h>
#define N 100
char* my_strcat(char* dest, const char* sour)
{
	assert(dest && sour);
	char* ret = dest;  
	//先找尾
	while (*dest)//这里不能写成*dest++
		dest++;
	//连接
	while (*dest++ = *sour++)
		;
	return ret;
}
int main()
{
	char arr1[N] = "abcdef";
	char arr2[N] = "ghijk";
	char* ret = my_strcat(arr1, arr2);
	printf("%s\n", ret);
	return 0;
}

4.strstr 函数的模拟实现

思路:函数原型-------char * strstr (  char * str1, const char * str2 )

函数功能:该函数在`str1`字符串中查找`str2`字符串的第一个出现位置,如果`str2`是`str1`的子

串,它会返回`str2`在`str1`中的起始位置的指针;如果`str2`不是`str1`的组成部分,则返回空指针

`NULL`。

思路:

1.先判断str2是否为空,如果为空就返回。

2.定义一个标记当前从str1中哪个位置开始比较的指针cur,定义s1每次比较时始终为当前cur的位置,s2为str2的起始位置。

3.在cur,s1,s2没到尾部的情况下,s1和s2相等的话就继续向后走进行比较。

4.当s2走到尾部就返回cur所标记   开始比较的位置。

5.其他情况都返回空指针。

#include <stdio.h>
char* my_strstr(const char* arr1, const char* arr2)
{
    char* s1 = NULL;
    char* s2 = NULL;
    char* cur = arr1;
    if (*arr2 == '\0')
        return (char*)arr1;
	while (*cur)
	{
		s1 = cur;
		s2 = arr2;
		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == 0)
			return (char*)cur;
		cur++;
	}
	return NULL;
}
int main()
{
	char arr1[] = "ahjhjabh";
	char arr2[] = "b";
	char* ret = my_strstr(arr1, arr2);
	if (ret == NULL)
		printf("Ҳ\n");
	else
	printf("%s", ret);
	return 0;
}

以上内容,如有错误,还望指出!

关注博主,优质内容不断更新!

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

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

相关文章

安装VM虚拟机并创建一个Linux CentOS 7无桌面系统

一、安装vm虚拟机软件 1 下载vm压缩包 百度网盘链接 链接&#xff1a;https://pan.baidu.com/s/1ipiWatBr0wHKMt5c5nQirw?pwdwoy2 提取码&#xff1a;woy2 2.下载完毕后&#xff0c;先将杀毒软件关闭 全部关闭 3. 解压后按照步骤安装即可 按照按照步骤&#xff0c;观看…

C++240613

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 要求&#xff1a;每行代码都有注释 #include "my_widget.h"My_Widget::My_Widget(QWidget *parent): QWidget(parent) {//设置窗口的标题this->setWindowTitle("真爱生命&#xff0c;远离赌博&…

Vue31-生命周期的简介

一、需求&#xff1a;文字的透明度递减 示例&#xff1a; 对象的简写形式 new vue({ key:value, key:value, 。。。。。。 }) 二、代码的实现 注意&#xff1a;JS不擅长小数的计算&#xff01;&#xff01;&#xff01; 此写法不好&#xff01;&#xff01;&#xff01;追求…

借力AI,助力网络钓鱼(邮件)检测

引言 互联网时代&#xff0c;邮件系统依然是人们工作、生活中的很重要的一部分&#xff0c;与此同时&#xff0c;邮件系统的发展带来的钓鱼邮件问题也成为网络中的最大的安全隐患之一。本文将为大家解开网络钓鱼&#xff08;邮件&#xff09;的神秘面纱&#xff0c;一探究竟&a…

刚刚!彬川机器人社招校招入职Verify测评素质性格测评真题原题题库更新了【含答案】

一、测评环境 温馨提示 1.本次测评包含【素质性格测评】和【Verify测评】两部分&#xff0c;预计用时60min&#xff0c;请确保作答时周围环境无干扰、网络畅通&#xff1b; 2.请使用电脑完成作答&#xff0c;建议使用以下浏览器登录&#xff1a;IE9.0及以上版本&#xff0c;火…

笔记99:OSQP 求解器示例代码

注1&#xff1a;以下代码是 OSQP 的官方文档提供的示例&#xff0c;我加上了详细的注释&#xff1b; 注2&#xff1a;OSQP 库仅支持C语言&#xff0c;不支持C&#xff0c;所以下面的示例代码使用的是C语言&#xff1b;但是 OSQP 求解库提供了针对C的接口 OSQP-EIGEN&#xff1…

免费的端口映射工具哪个好用

端口映射&#xff0c;即从一个网络环境下的端口映射到另一个网络环境下访问的过程。通常由软件方式来提供这一过程的实现&#xff0c;或一些客户端工具。当涉及内外网时&#xff0c;如内网端口地址映射到外网地址&#xff0c;即是内网穿透的原理。免费的端口映射工具有哪些&…

C++设计模式——Decorator装饰器模式

一&#xff0c;装饰器模式简介 装饰器模式是一种结构型设计模式&#xff0c; 它允许在不改变现有对象的情况下&#xff0c;动态地将功能添加到对象中。 装饰器模式是通过创建具有新行为的对象来实现的&#xff0c;这些对象将原始对象进行了包装。 装饰器模式遵循开放/关闭原…

对补码的理解:两种求法

课本的结论是&#xff1a;二进制数的最高位是符号位。符号位为 0 表示正数和 零 &#xff0c;符号位为 1 表示负数。 正数是原码反码补码都是一样的。负数的反码是&#xff1a;符号位不变&#xff0c;剩下位取反。 负数的补码是&#xff1a;符号位不变&#xff0c;剩下位取反&a…

u-boot(四)-顶层目录链接脚本文件(u-boot.lds)介绍

一&#xff0c;IMX6ULL映像文件 1&#xff0c;格式概述 对于IMX6ULL&#xff0c;烧写在EMMC、SD/TF卡上的程序&#xff0c;并不能“自己复制自己”&#xff0c;是“别人把它复制到内存里”。一上电首先运行的是boot ROM上的程序&#xff0c;它从EMMC、SD/TF卡上把程序复制进内…

妙用OSGraph:发掘GitHub知识图谱上的开源故事

作者&#xff1a;范志东 1. 何为OSGraph&#xff1f; OSGraph (Open Source Graph) 是一个开源图谱关系洞察工具&#xff0c;基于GitHub开源数据全域图谱&#xff0c;实现开发者行为、项目社区生态的分析洞察。可以为开发者、项目Owner、开源布道师、社区运营等提供简洁直观的…

电脑自带录屏在哪?电脑录屏,4个详细方法

在现代社会中&#xff0c;越来越多的人需要在电脑上录制视频&#xff0c;比如录制游戏操作、制作教学视频、演示文稿等等。因此&#xff0c;电脑录屏成为了一项非常重要的功能。那么电脑自带录屏在哪&#xff1f;本文将带领大家看看可以使用哪些方法进行录屏。 录屏方法一&…

SK海力士计划于2024年第四季度启动GDDR7大规模生产

SK海力士&#xff0c;作为HBM市场的领头羊&#xff0c;于6月13日宣布&#xff0c;公司目标于2024年第四季度开始其GDDR7芯片的大规模生产。 与此同时&#xff0c;美光科技在Computex展会上也宣布推出其GDDR7图形内存&#xff0c;目前正处于样品测试阶段。据AnandTech报道&#…

Python | Leetcode Python题解之第149题直线上最多的点数

题目&#xff1a; 题解&#xff1a; class Solution:def maxPoints(self, points: List[List[int]]) -> int:n len(points)if n < 2:return nres 2for i in range(n):x1, y1 points[i][0], points[i][1]has {}for j in range(i 1, n):x2, y2 points[j][0], points…

AI虚拟试穿技术:开启高保真、多场景、多样化服装组合的试穿应用

随着电子商务的快速发展,消费者对于在线购物体验的要求越来越高。特别是在服装领域,消费者渴望能够在购买前直观地了解服装的试穿效果。传统的虚拟试穿技术虽然已有一定的发展,但在不同场景下的高保真度和鲁棒性方面仍面临挑战。为此,我们研发了一种全新的AI虚拟试穿技术,…

当JS遇上NLP:开启图片分析的奇幻之旅

前言 在当今科技飞速发展的时代&#xff0c;JavaScript&#xff08;JS&#xff09;作为广泛应用的编程语言&#xff0c;展现出了强大的活力与无限的可能性。与此同时&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域也正在经历着深刻的变革与进步。 当这两者碰撞在一…

探索AI视频生成技术的原理

探索AI视频生成技术的原理 随着人工智能技术的迅猛发展&#xff0c;AI在视频生成领域的应用已经引起了广泛关注。从娱乐、广告到教育和科学研究&#xff0c;AI视频生成技术正在彻底改变我们制作和消费视频内容的方式。本文将深入探讨AI视频生成技术的原理&#xff0c;解析其背…

解决CentOS的yum命令失效的问题

近日笔者对一台装有 CentOS 7.9 系统的服务器反复折腾&#xff0c;玩到最后发现 yum 命令用不了&#xff0c;总是报下面的错误信息&#xff1a; There was a problem importing one of the Python modules required to run yum. The error leading to this problem was:/usr/l…

通用大模型VS垂直大模型,你更青睐哪一方?

AI大模型之辩&#xff1a;通用与垂直&#xff0c;谁将引领未来&#xff1f; 在人工智能&#xff08;AI&#xff09;领域&#xff0c;大模型技术的崛起无疑为整个行业带来了革命性的变革。然而&#xff0c;随着技术的深入发展&#xff0c;AI大模型的战场似乎正在悄然分化&#…

9.常见集合

目录 一、三种常见集合二、Vector2.1 特性2.2 创建并更新Vector2.3 读取Vector中的元素2.4 遍历元素2.5 储存不同类型的值 三、字符串3.1 概念3.2 新建3.2 更新3.3 索引字符串3.4 字符串切片3.5 字符串遍历 四、哈希map4.1 基本概念4.2 新建哈希map4.3 访问哈希map中的值4.4 更…