字符串操作函数1

news2024/12/28 3:35:25

1.strcpy使用

使用这个函数我们可以进行字符串拷贝。它有两个参数,第一个参数是指向目标空间,第二个参数是指向需要拷贝的字符串。返回值为拷贝完成后指向的字符串首地址。头文件为<string.h>

演示如下:

注意:

• 源字符串必须以 '\0' 结束。
• 会将源字符串中的 '\0' 拷贝到目标空间。
• 目标空间必须足够大,以确保能存放源字符串。
• 目标空间必须可修改。

2.strcpy模拟实现

#include<assert.h>
#include<stdio.h>

char* my_strcpy(char*p1,const char*p2)
{
	char* pt = p1;
	assert(p1 && p2);
	while (*p2)
	{
		*p1++ = *p2++;
	}
	return pt;
}
int main()
{
	char arr[] = "i love you";
	char arr1[30] = { 0 };
	char *pt=my_strcpy(arr1, arr);
	printf(pt);
	return 0;
}

我们首先使用assert断言p1和p2不能为NULL,然后使用whlie循环,正常情况下我们这个代码是不会拷贝\0的但是我们的目标空间都是0,所以我们即使不拷贝\0也没问题。

3.strcat的使用

字符串的追加。它有两个参数,第一个参数指向目标的空间,第二个参数指向需要追加的字符串。

返回值为指向目标空间的首元素地址。strcat是从目标空间的‘\0’,位置开始追加,并以追加字符串的‘\0’,作为结束标志。头文件为<string.h>

 演示如下:

 注意:

• 源字符串必须以 '\0' 结束。
• 目标字符串中也得有 \0 ,否则没办法知道追加从哪里开始。
• 目标空间必须有足够的大,能容纳下源字符串的内容。
• 目标空间必须可修改。

4.strcat模拟实现

char *my_strcat(char *dest, const char*src)
{
char *ret = dest;
 assert(dest != NULL);
assert(src != NULL);
while(*dest)
{
dest++;
}
while((*dest++ = *src++))
{
;
}
return ret;
}

我们还是需要用assert断言来判断传入指针不为空指针。并且我们还需要使用一个指针保存目标空间首元素地址,然后最后返回它即可。

5.strcmp的使用 

我们之前在比较结构体的时候使用过。它是按照字符的ASCLL码值进行比较的。头文件为<string.h>

下面是演示:

标准规定:
◦ 第一个字符串大于第二个字符串,则返回大于0的数字。
◦ 第一个字符串等于第二个字符串,则返回0。
◦ 第一个字符串小于第二个字符串,则返回小于0的数字。

6.strcmp的模拟实现

#include<assert.h>
#include<stdio.h>
int my_strcmp(const char* str1, const char* str2)
{
	int ret = 0;
	assert(str1 != NULL);
    assert(str2 != NULL);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return *str1 - *str2;
}
int main()
{
	char arr[] = "abcdef";
	char arr1[] = "bcdef";
	int ret=my_strcmp(arr, arr1);
	if (ret < 0)
	{
		printf("小于\n");
	}
	else if (ret == 0)
	{
		printf("等于\n");
	}
	else
		printf("大于\n");
	return 0;
}

大家可以思索思索,又不有啥缺陷。

谢谢

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

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

相关文章

2024-01-31(MapReduce,YARN)

1.MapReduce --- 分布式计算框架 MapReduce是分散--->汇总模式的分布式框架&#xff0c;可以供开发人员开发相关程序进行分布式数据计算 MapReduce提供了2个编程接口&#xff1a;Map接口&#xff0c;Reduce接口 其中&#xff0c;Map接口提供了“分散”功能&#xff0c;由…

【力扣经典面试题】189. 轮转数组

题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 …

OpenAI开放新功能,可通过@一键调用任意GPTs

人工智能技术的快速发展为我们的生活带来了许多便利和创新。作为人工智能领域的重要成果之一&#xff0c;OpenAI的GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型在自然语言处理方面取得了巨大的突破。 近日&#xff0c;OpenAI宣布推出了GPT Mentions功能…

shell脚本之多行重定向 免交互 expect ssh scp; 字符处理

多行重定向 使用I/O重定向的方式将命令列表提供给交互式程序 标准输入的一种替代品 Here Document 是标准输 入的一种替代品&#xff0c;可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是直接就地 生产出一个文件并用作命令的标准输入,Here Document 可…

D2076——低压立体声耳机放大电路,适用于便携式小型收音机或立体声耳机作双通道或BIL应用,外接元件少,采用SOP8封装

D2076是一块双通道音频功率放大器&#xff0c;最低工作电压可到1.0V. 适用于便携式小型收音机或立体声耳机作双通道或BIL应用。 主要特点&#xff1a; ● BTL工作 Po90mW (典型值)。 ● 外接元件少 ● 通过外接晶体管作为耳机功率放大。 ● 工作电压低 (1.0V最小值)。 ● 工…

框架学习Maven

声明&#xff1a;本文来源于黑马程序员PDF讲义 做为一名Java开发工程师&#xff0c;后端 Web开发技术是我们学习的重点&#xff0c;后端Web开发技术的学习&#xff0c;我们会先学习Java项目的构建工具&#xff1a;Maven 初识Maven Maven是Apache旗下的一个开源项目&#xff…

rust学习基于tokio_actor聊天服务器实战(一 )

前言 tokio是Rust中使用最广泛的异步Runtime&#xff0c;它性能高、功能丰富、便于使用&#xff0c;是使用Rust实现高并发不可不学的一个框架 Actor 背后的基本思想是产生一个独立的任务&#xff0c;该任务独立于程序的其他部分执行某些工作。 通常&#xff0c;这些参与者通过使…

【PyQt】02-基本UI

文章目录 前言一、首先了解什么是GUI&#xff1f;二、初学程序1.界面展示代码运行结果 2.控件2.1按钮展示代码运行结果 2.2 纯文本和输入框代码运行结果 3、重新设置大小 -resize4、移动窗口-move()5、设置界面在电脑中央5.1 代码运行结果 6、设置窗口图标代码运行结果 7、布局…

深度学习(10)-Keras项目详解(递归神经网络)

一.递归神经网络基础概念 递归神经网络(Recursive Neural Network, RNN)可以解决有时间序列的问题&#xff0c;处理诸如树、图这样的递归结构。 CNN主要应用在计算机视觉CV中&#xff0c;RNN主要应用在自然语言处理NLP中。 1.h0&#xff0c;h1.....ht对应的是不同输入得到的中…

判断当前设备是不是安卓或者IOS?

代码(重要点): 当前文件要是 xxx.js文件,就需要写好代码后调用才会执行: // 判断是不是安卓 const isAndroid () > {return /android/.test(navigator.userAgent.toLowerCase()); }// 判断是不是ios const isIOS () > {return /iphone|ipad|ipod/.test(navigator.use…

跟着cherno手搓游戏引擎【16】Camera和Uniform变量的封装

相机封装&#xff1a; OrthographicCamera.h: #pragma once #include <glm/glm.hpp> namespace YOTO {class OrthographicCamera{public:OrthographicCamera(float left,float right , float bottom,float top);const glm::vec3& GetPosition()const { return m_Pos…

Android开发--ProgressBar应用显示测点数量

1.自定义ProgressBarView public class ProgressBarView extends View {private Paint mPaintBack;private Paint mPaint;private Paint mPaintText;private float process;int strokeWidth 3;//圈宽度int textSize 17;//字大小private long duration 1000;private float st…

力扣 274.H指数

弄清楚H指数的含义就行 代码&#xff1a; class Solution { public:int hIndex(vector<int>& citations) {sort(citations.rbegin(),citations.rend());//先逆序排序for(int i0;i<citations.size();i){if(citations[i]<i1) return i;}return citations.size(…

【机器学习】监督学习算法之:决策树

决策树 1、引言2、决策树2.1 定义2.2 原理2.3 实现方式2.4 算法公式2.4.1 信息增益公式2.4.2 信息增益率公式 2.5 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;我被你骗了。 小鱼&#xff1a;… 别闹&#xff0c;我怎么可能骗你呢。 小屌丝&#xff1a;你上次…

【GPU驱动开发】-LLVM和Clang环境部署

前言 不必害怕未知&#xff0c;无需恐惧犯错&#xff0c;做一个Creator&#xff01; 一、下载LLVM源码 官网下载源码 https://github.com/llvm/llvm-project/releases/ 包含所有llvm版本的下载内容 win源码传到ubuntu 首先将虚拟机关机&#xff0c;在虚拟机设置中&#xff…

机器学习:梯度下降法(Python)

LinearRegression_GD.py import numpy as np import matplotlib.pyplot as pltclass LinearRegression_GradDesc:"""线性回归&#xff0c;梯度下降法求解模型系数1、数据的预处理&#xff1a;是否训练偏置项fit_intercept&#xff08;默认True&#xff09;&…

【Tomcat与网络8】从源码看Tomcat的层次结构

在前面我们介绍了如何通过源码来启动Tomcat&#xff0c;本文我们就来看一下Tomcat是如何一步步启动的&#xff0c;以及在启动过程中&#xff0c;不同的组件是如何加载的。 一般&#xff0c;我们可以通过 Tomcat 的 /bin 目录下的脚本 startup.sh 来启动 Tomcat&#xff0c;如果…

node.js(nest.js控制器)学习笔记

nest.js控制器&#xff1a; 控制器负责处理传入请求并向客户端返回响应。 为了创建基本控制器&#xff0c;我们使用类和装饰器。装饰器将类与所需的元数据相关联&#xff0c;并使 Nest 能够创建路由映射&#xff08;将请求绑定到相应的控制器&#xff09;。 1.获取get请求传参…

使用 Enigma Protector 无需管理员权限即可注册 ActiveX/COM 组件

我们的客户对如何保护 .NET 应用程序免遭破解和转储提出了许多问题。在本文中&#xff0c;我们将尝试描述保护此类特定文件的所有薄弱环节和细节。 The Enigma Protector 是一款专门设计用来为应用程序添加高强度保护的强大工具。它旨在防止非法复制、反编译和修改代码等操作&…

数据结构与算法面试系列-03

1. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 程序代码 package com.jingxuan.system;public class Sphere {public static void main(String[] args) {double s = 0;double t = 100;for (int i…