string的几个常见库函数

2023-05-16

文章目录

  • 前言
  • 一、strlen直接求字符串长度
  • 二、strcpy用来赋值
  • 三、strcat追加字符串
  • 四、strcmp用于比较两个字符串
  • 五、strstr子串查找
  • 六、strtok应用
  • 七、加长度限制
    • 八、strerror
  • 九、其他操作
    • 1.iscntrl
    • 2.isspace
    • 3.isdigit
    • 4.islower
    • 5.issupper
    • 6.toupper,tolower
    • 将 I Have An Apple.转小写
  • 总结


前言

注意:以下应用的头文件都是#include<string.h>


一、strlen直接求字符串长度

其头文件是#include<string.h>
size_t strlen(const char* string);

strlen 是求字符串长度的,求出的长度是不可能为负数的
所以返回类型设置为size_t 也是合情合理的
typedef unsigned int size_t

用代码实现strlen()

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

递归
int my_strlen1(const char* str)
{
	assert(str != NULL);
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}

//指针-指针
int my_strlen2(const char* str)
{
	const char* start = str;
	assert(str != NULL);
	while (*str)
	{
		str++;
	}
	return str - start;
}

int my_strlen(const char* str)
{
	assert(str != NULL);
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}
int main()
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d\n", len);

	return 0;
}

二、strcpy用来赋值

在这里插入图片描述

int main()
{
	//3-6=-3
	//
	if (strlen("abc") - strlen("abcdef") > 0)
	{
		printf(">\n");
	}
	else
	{
		printf("<=\n");
	}
	return 0;
}

用代码实现:

#include <string.h>
char* my_strcpy(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest && src);
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[20] = "";
	//char* p = "abcdefghiqwer";
	char arr2[] = "hello bit";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

三、strcat追加字符串

在这里插入图片描述

char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;

	//1. 找目标空间的\0
	while (*dest)
	{
		dest++;
	}
	//2. 追加
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr[20] = "hello ";
	//char arr2[] = "world";
	char* p = "world";
	my_strcat(arr, p);

	printf("%s\n", arr);

	return 0;
}

四、strcmp用于比较两个字符串

int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	/*if (*str1 > *str2)
		return 1;
	else
		return -1;*/
	return *str1 - *str2;
}


int main()
{
	char arr1[] = "abq";
	char arr2[] = "abcdef";
	//VS环境下:
	//> 1 
	//= 0 
	//< -1
	int ret = my_strcmp(arr1, arr2);

	if (ret>0)
		printf("arr1>arr2\n");

	printf("%d\n", ret);

	return 0;
}

五、strstr子串查找

代码实现:

char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	if (*str2 == '\0')
	{
		return (char*)str1;
	}
	const char* s1 = NULL;
	const char* s2 = NULL;
	const char* cp = str1;

	while (*cp)
	{
		s1 = cp;
		s2 = str2;
		while (*s1 !='\0' && *s2!='\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return (char*)cp;
		}
		cp++;
	}

	return NULL;
}

int main()
{
	char arr1[] = "abbbcdbbcef";
	char arr2[] = "bbc";
	char* ret = my_strstr(arr1, arr2);

	if (ret == NULL)
	{
		printf("找不到\n");
	}
	else
	{
		printf("%s\n", ret);
	}

	return 0;
}

六、strtok应用

int main()
{
	char arr[] = "zpengwei@yeah.net";//"@."
	char arr[] = "192#168.120.85";
	char* p = "#.";
	char buf[20] = { 0 };//"zpengwei\0yeah\0net"
	strcpy(buf, arr);
	char* ret = NULL;
	for (ret = strtok(buf, p); ret != NULL; ret=strtok(NULL, p))
	{
		printf("%s\n", ret);
	}
	
	char* ret = strtok(buf, p);
	printf("%s\n", ret);
	ret = strtok(NULL, p);
	printf("%s\n", ret);
	ret = strtok(NULL, p);
	printf("%s\n", ret);

	zpengwei
	yeah
	net
	return 0;
}


七、加长度限制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、strerror

C语言的库函数在运行的时候,如果发生错误,就会将错误码存在一个变量中,这个变量是:errno
错误码是一些数字:1 2 3 4 5
我们需要讲错误码翻译成错误信息
在这里插入图片描述

#include <stdio.h>
#include <string.h>
int main()
{
	printf("%s\n", strerror(0));
	printf("%s\n", strerror(1));
	printf("%s\n", strerror(2));
	printf("%s\n", strerror(3));
	printf("%s\n", strerror(4));
	printf("%s\n", strerror(5));

	return 0;
}

strerror,perror都会报错,但是参数不同。
在这里插入图片描述
在这里插入图片描述

#include <errno.h>
#include <stdio.h>
#include <string.h>
int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		1.printf("%s\n", strerror(errno));
		//2.perror("fopen");
		return 1;
	}
	//读文件
	//关闭文件
	fclose(pf);
	pf = NULL;

	return 0;
}

九、其他操作

1.iscntrl

2.isspace

3.isdigit

int main()
{
	int ret = isdigit('Q');
	printf("%d\n", ret);//结果0

	return 0;
}

4.islower

5.issupper

6.toupper,tolower

int main()
{
	printf("%c\n", toupper('a'));A
	printf("%c\n", tolower('A'));a

	return 0;
}

将 I Have An Apple.转小写

I Have An Apple.
int main()
{
	char arr[] = "I Have An Apple.";
	int i = 0;
	while (arr[i])
	{
		if (isupper(arr[i]))
		{
			arr[i] = tolower(arr[i]);
		}
		printf("%c", arr[i]);
		i++;
	}
	return 0;
}

总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

string的几个常见库函数 的相关文章

  • C++成员初始化

    C 43 43 成员分为 xff1a 一般变量 xff0c const修饰变量 xff0c 引用类型成员 xff0c static成员 xff0c const staic成员 同static const xff0c 自定义类型对象 clas
  • HTTP协议解析

    目录 1 HTTP协议的概念 2 HTTP协议格式 3 HTTPS 1 HTTP协议的概念 在我们之前学习网络的过程中 xff0c 我们知道了目前主流网络分层模型共分为5层 xff0c 分别是物理层 xff0c 数据链路层 xff0c 网络
  • cmake编译opencv开源项目报错问题

    最近使用cmake在编译一个配置了opencv环境的c 43 43 开源项目时遇到如下问题 CMake Warning at D opencv4 OpenCVConfig cmake 176 message Found OpenCV Win
  • Ubuntu系统换源

    简单介绍一下源 xff0c 源就是一个大仓库 xff08 类似应用商店 xff09 xff0c 系统下载软件需要从这个仓库下载 xff0c 因为Ubuntu默认源是国外的 xff0c 所以在下载东西的时候会出现下载速度很慢的情况 xff0c
  • 字符串的简单介绍和字符串的大小比较

    以前就写过一篇关于String的文章 xff0c 今天再来写一篇 xff0c 更加深入了解一下String类 x1f550 1 String类的定义 x1f551 2 String类的创建 x1f552 3 字符串的大小比较 1 之前在C语
  • 数据结构1

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
  • 洛谷P5740 【深基7.例9】最厉害的学生

    题目描述 现有 N N le 1000 N N 1000 名同学参加了期末考试 xff0c 并且获得了每名同学的信息 xff1a 姓名 xff08 不超过 8 个字符的仅有英文小写字母的字符串 xff09 语文 数学 英语成绩 xff08
  • C语言创建链表并输出

    代码如下 define CRT SECURE NO WARNINGS include lt stdio h gt include lt assert h gt include lt string h gt include lt stdlib
  • 游戏搬砖是什么意思?

    网络游戏搬砖是指在各网络游戏中 xff0c 玩家把花大量时间 精力赚的钱转手为游戏买各种东西 搬砖原本是一个汉语词语 xff0c 意思是原指搬运砖块 xff0c 在网络语中 xff0c 搬砖引申为工作辛苦 重复机械 赚钱不多的工作 在一些方
  • C语言实现扫雷游戏

    话不多说直接淦代码 代码都有详细注释 define CRT SECURE NO WARNINGS include lt stdio h gt include lt time h gt include lt stdlib h gt inclu
  • C语言用栈实现队列(数据结构)

    1 首先需要两个栈来模拟队列的出队和入队 2 假设入队1 2 3 4 如果要出队则不能直接出栈 需要进行数据的搬移 先把s1的数据全部放入s2中 然后再在s2出栈 gt 整个队列出队 3 如果再要入队则将入队元素放入s1 若要出队则出栈s2
  • Linux权限理解(详细详细)

    目录 一 权限的概念 二 Linux权限管理 1 文件访问者的分类 xff08 人 xff09 2 文件类型和访问权限 xff08 事物属性 xff09 3 文件权限值的表示方法 1 字符表示 2 8进制数字表示法 4 文件访问权限的相关设
  • Linux管道

    目录 1 管道概念 2 管道分类 1 匿名管道 1 基本实现与概念 2 站在文件描述符角度 深度理解管道 3 站在内核角度 管道本质 4 管道读写规则 5 管道属性设置与阻塞验证 6 管道特点 匿名 2 命名管道 1 创建一个命名管道 2
  • string类(C++)

    目录 一 简单了解string类 二 string的接口与使用 2 1string类对象的常见构造 2 2 string类对象的容量操作 2 3 string类对象的访问及遍历操作 2 4 string类对象的修改操作 一 简单了解stri
  • 力扣260:只出现一次的数字|||(异或)

    目录 题目 解析 完整代码 题目 我们首先看一下题目 给定一个整数数组 nums xff0c 其中恰好有两个元素只出现一次 xff0c 其余所有元素均出现两次 找出只出现一次的那两个元素 你可以按 任意顺序 返回答案 接口 class So
  • C++(多态)

    目录 一 多态概念 二 多态的定义及实现 2 1多态的构成条件 2 2 虚函数 2 4虚函数重写的两个例外 2 5 C 43 43 11 override 和 final 三 重载 覆盖 重写 隐藏 重定义 的对比 一 多态概念 多态的概念
  • STM32系列——串口收发数据基础

    串行接口相关知识 两种通信方式 xff1a 并行通信与串行通信 xff0c 并行通信传输速度快但是占用的引脚资源多 xff0c 串行通信传输速度慢但是占用的引脚资源少 三种模式 xff1a 单工 半双工 全双工 异步串行通信 通信双方在没有
  • 【ROS小记】树莓派ubuntu mate20.04换源

    根据网上教程更换软件源时发现报错 错误 8 http ppa launchpad net ubuntu desktop ubuntu make ubuntu focal Release 404 Not Found 以及 仓库 34 34 无
  • orb-slam2跑通EuRoC数据集,并用evo对其进行评估(详细)

    evo的安装 xff1a 打开终端 xff0c 运行下面的指令 xff1a sudo apt install python pip pip install evo upgrade no binary evo pip install evo
  • Python爬虫是什么?

    首先要知道python爬虫是一个程序 xff0c 这个程序的目的就是为了抓取万维网信息资源 xff0c 比如你日常使用的谷歌等搜索引擎 xff0c 搜索结果就全都依赖爬虫来定时获取 了解一个python爬虫离不开了解一下爬虫的基本原理 xf

随机推荐

  • 【struct和class的区别】

    在C中struct有以下特征 xff1a 1 C中的struct是一种数据类型 xff0c struct内不能包含函数 2 C中struct不能为空 在C 43 43 中的struct和class的区别 在c 43 43 中将struct的
  • clion的安装、汉化与配置

    这里我们就来详细介绍一下CLion的安装 汉化 激活以及配置吧 xff01 xff01 目录 一 安装1 下载安装包2 开始安装 二 汉化三 配置 xff08 MinGW xff09 1 官网下载MInGW2 开始配置 四 检验 一 安装
  • 串口通信+实例编写

    一 通信接口背景知识 1 处理器与外部设备通信的两种方式 并行通信 xff1a 传输原理 xff1a 数据各个位同时传输 优点 xff1a 速度快 缺点 xff1a 占用引脚资源多 xff08 例如 xff1a A向B进行传输时一次性可以用
  • keil手把手创建文件

    工具 xff1a Keil4 下面我们来认识一下如何创建一个Keil代码工程 首先我们在文件管理器中创建一个文件夹 然后我们打开Keil软件 xff0c 找到Project gt New Project 自定义一个名字保存 xff0c 然后
  • 1183 连接字符串

    题目描述 输入两个字符串 xff0c 设计函数连接这两个字符串 单个字符串的长度不超过100 不要使用系统提供的strcat函数 输入要求 输入2个字符串 xff0c 每个字符串以换行符结束 输出要求 输出连接好的字符串 输入样例 Coun
  • 路劲规划与轨迹跟踪学习4——人工势场法

    本文参考 85条消息 路径规划 局部路径规划算法 人工势场法 xff08 含python实现 c 43 43 实现 xff09 CHH3213的博客 CSDN博客 人工势场法路径规划 路径规划与轨迹跟踪系列算法学习 第6讲 人工势场法 哔哩
  • STM32 HAL库详解(二):UART

    在stm32编程时 xff0c 最常用的通讯方式就是串口通讯 一般使用HAL库来实现串口通讯 但有时 xff0c 我们不满足于HAL库的代码 xff0c 或者出现 玄学bug 需要了解具体原理来debug 下面将通过详解HAL库函数来解释u
  • C语言实现十进制转化为十六进制-------数组,switch语句,while循环语句

    内容目录 十进制如何转化为十六进制 思路解析 运用知识点 代码实现 1 十进制如何转化为十六进制 十六进制每位数上从大到小是0123456789ABCDEF 十进制转化为十六进制与十进制转化为八进制一样求法 xff0c 就是求余 例如十进制
  • 实测(一) NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图

    开发环境 xff1a NX 43 Ubuntu18 04 43 ROS melodic 一 ARM架构下 Realsense D435i 环境搭建 因为NVIDIA Xavier NX是一款arm架构的嵌入式开发板 xff0c 因此安装方式
  • c/c++输入带空格、tap、换行符的字符串

    1 scanf charstr 10 scanf 34 s 34 str 123 adw 其实只输入了 123 1 不读入空格和回车还有tap键 从空格处结束 2 输入字符串长度超过字符数组元素个数不报错 xff0c 只是不读入 3 当输入
  • 如何防止网站被爬虫爬取的几种办法

    相较于爬虫技术 xff0c 反爬虫实际上更复杂 目前许多互联网企业都会花大力气进行 反爬虫 xff0c 网络爬虫不但会占据过多的网站流量 xff0c 导致有真正需求的用户没法进入网站 xff0c 另外也有可能会导致网站关键数据的外泄等现象
  • 指定位置插入字符串(c++insert函数、find函数使用)

    一 insert函数 xff08 插入函数 xff09 str1 61 str1 xff08 被插入字符串 xff09 insert 插入位置 str2 xff08 被插入字符串 xff09 xff0c n xff0c m ps xff1a
  • vector容器(C++黑马程序员笔记)

    3 2 vector容器 3 2 1 vector基本概念 功能 vector数据结构和数组非常相似 xff0c 也称为单端数组 vector与普通数组区别 不同之处在于数组是静态空间 xff0c 而vector可以动态扩展 动态扩展 并不
  • set容器(c++黑马程序员笔记)

    3 8 set multiset容器 3 8 1 set基本概念 简介 所有元素都会在插入时自动被排序 本质 set multiset属于关联式容器 xff0c 底层结构是用二叉树实现 set和multiset区别 set不允许容器中有重复
  • map函数

    3 9 map multimap容器 3 9 1 map基本概念 简介 map中所有元素都是pair pair中第一 个元素为key 键值 xff0c 起到索引作用 xff0c 第二个元素为value 实值 所有元素都会根据元素的键值自动排
  • 解决Maven配置本地仓库路径不生效问题多个方法详解。(已成功解决自己遇到的问题)

    首先我尝试了很多种方法 xff0c 就是这个方法让我成功 xff0c 和大家分享一下 xff01 xff08 我用方法二成功的 xff01 xff09 maven本地仓库默认值 xff1a 用户家目录 m2 repository 由于本地仓
  • Servlet快速学习和Tomcat快速部署(web)

    Servlet快速学习和Tomcat快速部署 xff08 web xff09 一 快速入门二 执行流程三 生命周期四 Servlet体系结构五 Servlet urlPattern配置六 XML配置方式编写Servlet七 Tomcat快速
  • 蓝桥杯必备模板(python)

    蓝桥杯必备算法模板 xff08 python xff09 xff1a 前缀和模板差分模板二分双指针位运算最大公约数和最小公倍数模板判断质数和埃氏筛法模板唯一分解定理和质因数分解关系和模板快速幂并查集区间合并回溯算法模板 xff1a DFS
  • 蓝桥杯必备模块及常用操作(python)

    蓝桥杯必会模块 xff08 python xff09 xff1a 字符类型模块日期函数模块 常用 优先级队列itertools模块collections模块Bisect模块List 集合set 集合Math模块 字符类型模块 先看点常用但比
  • string的几个常见库函数

    文章目录 前言一 strlen直接求字符串长度二 strcpy用来赋值三 strcat追加字符串四 strcmp用于比较两个字符串五 strstr子串查找六 strtok应用七 加长度限制八 strerror 九 其他操作1 iscntrl