【C语言】关于字符串函数的使用及模拟实现(2)

news2024/9/20 11:02:24

一、字符串的复制

1.1 库函数strcpy的使用

在函数strcpy中,函数的返回类型为char* ,参数部分首先是指向目标地址的指针,其次是指向源地址的指针(由于源地址中内容不受影响,则可以使用const修饰),函数所需的头文件为string.h

6419a0dc136b467bad5b4e516e5f3068.png

1dbbff94c25e4708bdc079544a8f0bdd.png

 

1.2 库函数strncpy的使用

strncpy函数在strcpy函数基础上加入了一个参数,表示复制到目标地址去的个数

e894fff37cf743d0976a1318cae70a29.png

98288e4fa23c4e6aab34ea9e8ad8dd67.png

 

1.3 模拟实现strcpy及strncpy

模拟实现库函数strcpy

#include<stdio.h>
char* my_strcpy(char* b,const char* a){
	char* tmp = b;
	while(*a){
		*b = *a;
		a++;
		b++;
	}
	return tmp;
}
int main(){
	char a[20] = "abcd";
	char b[20];
	char c[20];
	printf("b[] = %s\n",my_strcpy(b,a));
	printf("c[] = %s\n",my_strcpy(c,"dsda"));
	return 0;
}

模拟实现库函数strncpy

#include<stdio.h>
char* my_strncpy(char* b,const char* a,int c){
	int count = 0;
	char* tmp = b;
	while(count < c){           //for(int count=0;count<c;a++,b++,count++){
		*b = *a;                //    *b = *a;
		a++;                    //	}
		b++;
		count++;
	}
	return tmp;
}
int main(){
	char a[20] = "abcd";
	char b[20];
	char c[20];
	printf("b[] = %s\n",my_strncpy(b,a,3));
	printf("c[] = %s\n",my_strncpy(c,"sdas",2));
	return 0;
}

二、字符串的比较

2.1 库函数strcmp的使用

函数的返回类型为int,所需的头文件为string.h

218efc6f558f4d1584df85099ca6ac09.png

 比较规则:

13713ba9602846269e29710266e1e0fd.png

 437532010ff649ee8d08bf27df85c1c5.png

2.2 库函数strncmp的使用

7debd498ab6b45ca8fc990ead443194b.png

 6baeeeef38e648a4951a8b0aaffdfbc8.png

2.3 模拟实现strcmp及strncmp

模拟实现库函数strcmp

#include<stdio.h>
int my_strcmp(const char* a,const char* b){
	while(*a || *b){
		if(*a > *b){
			return 1;
		}else if(*a < *b){
			return -1;
		}
		a++;
		b++;
	}
	return 0;
}
int main(){
	char a[20] = "abcd";
	char b[20] = "abdd";
	int tmp = my_strcmp(a,b);
	printf("%d\n",tmp);
	tmp = my_strcmp(b,a);
	printf("%d\n",tmp);
	tmp = my_strcmp(a,a);
	printf("%d\n",tmp);
	return 0;
}

模拟实现库函数strncmp

#include<stdio.h>
int my_strncmp(const char* a,const char* b,int c){
	int count = 0;
	while((*a || *b) && count < c){
		if(*a > *b){
			return 1;
		}else if(*a < *b){
			return -1;
		}
		a++;
		b++;
		count++;
	}
	return 0;
}
int main(){
	char a[20] = "abcd";
	char b[20] = "abdd";
	int tmp = my_strncmp(a,b,3);
	printf("%d\n",tmp);
	tmp = my_strncmp(a,b,2);
	printf("%d\n",tmp);
	return 0;
}

三、字符串的切割

3.1 库函数strtok的使用

函数返回类型为char* ,首个参数为被切割的字符串,其次是切割字符串的分割符。

strtok函数会改变被操作的字符串,所以在使用strtok函数时一般要先临时拷贝一份

4adfb2396f024f0780c83f3be5a85900.png

#include<stdio.h>
#include<string.h>
int main(){
	char a[20] = "abcd#abc^ab#a";
	char* p = NULL;
	p = strtok(a,"#^");    //首次调用时,函数找到第一个标记并记录在字符串中的位置,并将其改为\0
	while(p != NULL){
		printf("%s\n",p);
		p = strtok(NULL,"#^");   //函数在同一字符串中的保存位置开始查找
	}
	return 0;
}
#include<stdio.h>
#include<string.h>
int main(){
	char a[20] = "abcd#abc^ab#a";
	char* p = NULL;
	for(p = strtok(a,"#^");p != NULL;p = strtok(NULL,"#^")){
		printf("%s\n",p);
	}
	return 0;
}

 

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

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

相关文章

51单片机—串口

一、 串口基本认知 串行接口简称串口&#xff0c;也称串行通信接口或串行通讯接口&#xff08;通常指COM接口&#xff09;&#xff0c;是采用串行通信方 式的扩展接口。串行接口&#xff08;Serial Interface&#xff09;是指数据一位一位地顺序传送。其特点是通信线路简 单&a…

#70结构体案例1(导师,学生,成绩)

效果&#xff1a; 代码&#xff1a; #include <iostream> #include <string> using namespace std;#include "random"int get_random_num(int min,int max) {random_device rd;mt19937 gen(rd());uniform_int_distribution<> dis(min,max);int ra…

C语言实现常见O(N^2)的排序算法

目录 1.排序的概念及常见排序算法 1.1排序的概念 1.2常见的排序算法 2.常见O(N^2)排序算法的实现 2.1插入排序 2.1.1基本思想 2.1.2直接插入排序 2.1.2.1直接插入排序的特性 2.1.2.2直接插入排序算法实现 2.2选择排序 2.2.1基本思想 2.2.2直接选择排…

【电脑基础硬件】磁盘阵列

磁盘阵列 一、磁盘阵列概述作用&#xff1a;RAID级别&#xff1a; 二、Raid0Raid1 一、磁盘阵列概述 磁盘阵列&#xff08;Disk Array&#xff09;是一种将多个独立的磁盘驱动器组合起来形成一个逻辑单元的技术&#xff0c;目的是为了提高存储系统的性能、可靠性和可用性。磁盘…

关于儿童编程语言

青少年通常会通过Scratch或Python开始学习编程。在这两种语言中&#xff0c;代码的编写&#xff08;或者在Scratch中是构建&#xff09;方式类似于英语&#xff0c;这使得初学者更容易学习。Scratch的一个重要卖点是对视觉和运动感知学习者非常友好。这些代码块按颜色编码&…

亚信安全获国家信息安全服务(风险评估和安全工程类)二级资质

近日&#xff0c;亚信安全荣获由中国信息安全测评中心颁发的《国家信息安全测评信息安全服务资质证书—风险评估二级》和《国家信息安全测评信息安全服务资质证书—安全工程类二级》资质。亚信安全凭借综合实力和优秀的技术能力&#xff0c;成为为数不多的获得国家信息安全服务…

PXE无人值守

PXE介绍 预启动执行环境&#xff08;Preboot eXecution Environment&#xff0c;PXE&#xff09;也被称为预执行环境&#xff0c;提供了一种使用网络接口&#xff08;Network Interface&#xff09;启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备&#…

支持跨设备操作,自带横向霍尔感应滚轮,雷柏MT760系列鼠标上手

日常工作中&#xff0c;确实很需要一只专为商务办公设计的鼠标&#xff0c;这类鼠标通常会有更低调的外观&#xff0c;同时具备静音按键之类的设计&#xff0c;能够为工作带来更多的方便。我最近上手了雷柏MT760和MT760 Mini。这两款鼠标虽然尺寸不同&#xff0c;但共享了相同的…

12.upload-labs靶场通关详解(11~17)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、Pass11&#xff08;白名单&#xff1a;get00截断&#xff09;2、Pass12&#xff08;白名单&#xff1a;post00截断&#xff09;3、Pass13&#xff08;图片马绕过…

封装组件之使用vue3封装input框并显示联想数据功能

新建Input.vue 定义input框及相关事件 <inputtype"text"v-model"query"input"onInput"blur"hideSuggestions"focus"onInput"/> input输入事件、blur失去焦点、focus获取焦点 //当输入内容时才显示ul内容 const onI…

优化if-else的11种方案

优雅永不过时&#xff01; 1. 使用早返回&#xff08;Early Return&#xff09;&#xff1a;尽可能早地返回&#xff0c;避免嵌套的if-else。 优化前&#xff1a; public class NoEarlyReturnExample {public boolean hasPositiveNumber(int[] numbers) {boolean foundPositi…

自然语言常见面试题及答案(21~40)

Reply&#xff1a;面试题 获取资料下载 文章目录 21. 介绍一下信息抽取在自然语言处理中的重要性和实现方式。22. 谈谈你对预训练语言模型&#xff08;如 BERT、GPT 等&#xff09;的认识和应用经验。23. 简述一下情感分析的流程和方法。24. 对于机器翻译任务&#xff0c;你了…

自旋锁(Spinlock):轻量级锁机制

自旋锁&#xff08;Spinlock&#xff09;&#xff1a;轻量级锁机制 1、什么是自旋锁&#xff1f;2、优势3、局限4、实现与应用 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java并发编程中&#xff0c;自旋锁以其独特的非阻塞特性脱颖而…

WordPress原创插件:Category-id-list分类ID显示查看

WordPress原创插件&#xff1a;Category-id-list分类ID显示查看 插件设置位置在工具栏

STL | string C++底层实现

目录 前言 总代码 string结构框架搭建 三个成员 构造 析构 拷贝构造、赋值重载 和 swap size、c_str、operator[ ] string迭代器的简单实现 扩容 reserve insert&#xff08;插入字符和字符串&#xff09; 单字符 字符串 push_back、append、 erase 删除 find查找 …

C++计算字符串中大写、小写、数字、空格、其他字符的个数

#include <iostream> #include <array> using namespace std;int main() {cout << "请输入一个字符串:";string str;getline(cin,str);int daxie0,xiaoxie0,num0,space0,other0;int lenstr.size();for(int i0;i<len;i){if(str[i]>A&&…

Oracle认证1Z0-071线上考试注意事项

目录 一、前言二、回顾过往战绩第一次 裸考&#x1f412;第二次 背题库硬考&#xff01;&#x1f412;第三次 软件卡住&#xff0c;寄&#xff01;&#x1f648;第四次 汇总纠错&#xff0c;通过&#xff01;&#x1f31a; 三、考试流程四、考试注意事项1. 是否需要科学上网2. …

vue(vue2和vue3)项目打包去除console.log

1.Vue2去除 module.exports { configureWebpack: (config) > {// 取消console打印config.optimization.minimizer[0].options.terserOptions.compress.drop_console truereturn {name: "项目名称",resolve: {alias: {"": resolve("src")}}…

【八股文】MySQL

1.char 和 varchar的区别 char是定长的&#xff0c;varchar是可变的字符串char适合存长度差不多的或者较短的&#xff0c;例如手机号&#xff0c;身份证&#xff0c;MD4加密算法。varchar用来存备注信息&#xff0c;用户昵称等不确定长度的信息。 2.Decimal、double和float的区…

Mybatis学习-day18

Mybatis学习-day18 数据持久化是将内存中的数据模型转换为存储模型&#xff0c;以及将存储模型转换为内存中数据模型的统称。例如&#xff0c;文件的存储、数据的读取以及对数据表的增删改查等都是数据持久化操作。 MyBatis 支持定制化 SQL、存储过程以及高级映射&#xff0c…