第九章 字符串处理函数

第九章 用Java实现JVM之数组和字符串 上一篇我们已经实现了方法调用,今天开启新的征程,继续往下。聚焦于数组今天主要讲述数组和字符串,整个JVM的实现进度已经开始倒计时了。。。 阅读详情

#pragma指令的作用:用于指定计算机操作系统特定的编译功能
#pragma warning(disable:4996) 在c文件开始处协商,告诉编译器忽略4996警告,strcpy、scanf等一些不安全的函数就可以用了。

测字符串长度函数

头文件:#include<string.h>
函数:size_t strlen(const char *s)

	char* str = "hello world";
	char str1[20] = "hello world";
	printf("%d\n", sizeof(str));//4
	printf("%d\n", sizeof(str1));//20
	printf("%d\n", strlen(str));//11
	printf("%d\n", strlen(str1));//11

sizeof是一个关键字,判断占用内存的字节数。
strlen是个函数,判断的是字符串中字符的个数。

一个汉字算两个字符长度。

	char* str = "你好";
	printf("%d\n", strlen(str));//4

字符串拷贝

strcpy

头文件:#include<string.h>
函数:char* strcpy(char *dest, const char *src);
拷贝src指向的字符串到dest指向的内存中,‘\0’也会拷贝。
注意:使用此函数的时候,必须保证dest指向的内存空间足够大,否则会出现内存污染。

	char str[100] = "hello world 111";
	//只覆盖了前面的字符
	strcpy(str, "yyyyy");
	printf("%s\n", str);//yyyyy
	printf("%s\n", str+6);//world 111
	return 0;

strncpy

头文件:#include<string.h>
函数:char* strncpy(char *dest, const char *src, size_t count);
拷贝src指向的字符串的前count个字节到dest指向的内存中,不拷贝‘\0’。
**注意:**如果count大于src指向的字符串的字符个数,则在dest后面填充n-strlen(src)个’\0’

	char str[100] = "hello world 111";
	strncpy(str, "yyyyy", 2);
	printf("%s\n", str);//yyllo world 111
	strncpy(str, "yyyyy", 6);
	printf("%s\n", str);//yyyyy

字符串追加函数

strcat

头文件:#include<string.h>
函数:char* strcat(char *dest, const char *src);
strcat函数追加src字符串追加到dest字符串后面。追加的时候会追加’\0’
注意:判断dest结尾是按\0判断的。dest的内存要足够大。

	char str[100] = "hello\0 world 111";
	strcat(str, "aaaa");
	printf("%s\n", str);//helloaaaa

strncat

头文件:#include<string.h>
函数:char* strcat(char *dest, const char *src, size_t n);
追加src字符串前n个字符追加到dest字符串后面。追加的时候会追加’\0’
如果n大于src字符个数,只将src字符追加到dest后面。

字符串比较函数

strcmp

头文件:#include<string.h>
函数:int strcmp(const char *s1, const char *s2);
比较s1和s2指向字符串的大小。
比较的方法:逐个比较ASCII码,比较出大小就返回,如果所有字符都一样,返回0,'\0’最小。
返回值:s1>s2,返回1,s1<s2返回-1,s1==s2,返回0

	char str[100] = "hello world 111";
	char* str1 = "hello you";
	int res = strcmp(str, str1);
	printf("%d", res);//-1

strncmp

头文件:#include<string.h>
函数:int strcmp(const char *s1, const char *s2, size_t n);
比较两个字符串前n个字符。

	char str[100] = "hello world 111";
	char* str1 = "hello you";
	int res = strncmp(str, str1, 5);
	printf("%d", res);//0

字符查找函数

strchr

头文件:#include<string.h>
函数:char *strchr(const char *s1, int c);
在字符指针s指向的字符串中,找ASCII码为c的字符。
注意:是首次匹配。有多个,也只会返回第一次匹配到字符的地址,找不到返回NULL

	char str[100] = "hello world 111";
	char* res = strchr(str, 'l');
	printf("%d\n", res-str);//2

strrchr

头文件:#include<string.h>
函数:char *strrchr(const char *s1, int c);
和strchr的区别是,该函数是找最后一次匹配的地址。

strstr

头文件:#include<string.h>
函数:char *strstr(const char *haystack, const char *needle);
在haystack指向的字符串中查找needle指向的字符串,也是首次匹配
找到返回字符串的首地址,没到找返回NULL

	char *str = "hello world 111";
	char* res = strstr(str, "world");
	printf("%p\n", str);//00367B30
	printf("%p\n", res);//00367B36

空间设定函数

memset

函数:void* memset(void *ptr, int value, size_t num);
memset函数是将ptr指向的内存空间的num个字节全部赋值为value
返回目的内存的首地址,即ptr的值。

	char str[100] = "hello world 111";
	memset(str, 'a', 5);
	printf("%s\n", str);//aaaaa world 111

字符串转换数值

atoi\atol\atof
头文件:#include<stdlib.h>
函数:int atoi(const char *nptr);
函数:long atol(const char *nptr);
函数:double atof(const char *nptr);
将nptr指向的字符串转换称整数。无法转换为数字,则返回0。比如‘123’转换为123。

	char *str = "123";
	char *str1 = "abv";
	int res = atoi(str);
	int res1 = atoi(str1);
	printf("%d\n", res);//123
	printf("%d\n", res1);//0

字符串切割函数

strtok

头文件:#include<string.h>
函数:char *strtok(char *str, const char *delim);
字符串切割,按照delim指向的字符串中的字符,切割str指向的字符串。
其实就是在str指向的字符串中发现了delim字符串中的字符,就将其变成’\0’
调用一次只切割一次,再去切割需要将第一次参数传NULL,意思是按照上次切割的位置继续切.
无法切割返回NULL

	char str[100] = "aaa,:.bbb,:.ccc";
	char* res = strtok(str, ",.:");
	char* res1 = strtok(NULL, ",.:");
	char* res2 = strtok(NULL, ",.:");
	printf("%s\n", res);//aaa
	printf("%s\n", res1);//bbb
	printf("%s\n", res2);//ccc

格式化字符串操作函数

sprintf

int sprintf(char *buf, const char *format, …);
输出到buf指定的内存区域。返回字符数

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
	char buf[20];
	sprintf(buf, "%d %d", 11, 22);
	printf("%s", buf);//11 22
}

sscanf

int sscanf(char *buf, const char *format, …);
从buf指定的内存区域读入信息。

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
	char *str = "2023-10-07";
	int a, b, c;
	int res = sscanf(str, "%d-%d-%d ", &a,&b,&c);
	printf("%d\n", a);//2023
	printf("%d\n", b);//10
	printf("%d\n", c);//7
	printf("%d\n", res);//3
}

高级用法

1、跳过数据:%*s或者%*d
跳过一个。

	char *str = "2023-10-07";
	int a, b;
	int res = sscanf(str, "%*d-%d-%d ", &a,&b);
	printf("%d\n", a);//10
	printf("%d\n", b);//7
	printf("%d\n", res);//2

2、读取指定宽度的数据
%[width]s

	char *str = "2023-10-07";
	char resStr[20];
	int res = sscanf(str, "%4s ", resStr);
	printf("%s\n", resStr);//2023
	printf("%d\n", res);//1

3、支持集合操作
%[a-z]表示匹配a到z中任意字符。尽可能多的匹配;遇到不匹配的则停止

	char *str = "asdfasdfa123saff";
	char resStr[100];
	int res = sscanf(str, "%[a-z] ", resStr);
	printf("%s\n", resStr);//asdfasdfa
	printf("%d\n", res);//1

%[aBc] 匹配a、B、c中的任意一员。不匹配则停止

	char *str = "asdAAfasdfa123saff";
	char resStr[100];
	int res = sscanf(str, "%[Aads] ", resStr);
	printf("%s\n", resStr);//asdAA
	printf("%d\n", res);//1

%[^aBc]匹配非aBc中的任意一员。

	char *str = "asdAAfasdfa123saff";
	char resStr[100];
	int res = sscanf(str, "%[^f] ", resStr);
	printf("%s\n", resStr);//asdAA
	printf("%d\n", res);//1

%[^a-z] 表示读取除a-z以外的所有字符。

	char *str = "hhhhjhjghasdAAfasdfa123saff";
	char resStr[100];
	int res = sscanf(str, "%[^a-f] ", resStr);
	printf("%s\n", resStr);//hhhhjhjgh
	printf("%d\n", res);//1

const

1、const修饰普通变量,代表制度的意思。
const int a = 100;以后的程序中不能修改a的值。
2、cosnt修饰指针
const char *str;
意思是str指向的内存的内容不能通过str来修改。但是恶意改变str的指向。
char * const str;
意思是str是只读的变量,str指向的内存可以修改,但是不能改变str的指向。
cosnt char * const str;
指向的内存不能修改,也不能改变指向。

OTFS从零开始11 10 未来的无线网络有望提供全球覆盖,因此需要支持在恶劣环境下的各种新兴应用,例如飞机上的移动通信(MCA)、低地球轨道(LEO)卫星通信、车对车(V2V)通信、高速铁路(HSR)通信、无人驾驶飞机(UAV)通信和水下声学通信(UAC)。在这些恶劣环境中的无线信道通常被视为对通信不友好,其特点是严重的延迟和多普勒扩散,以及有限的路径寿命等。这些不利于通信的特性使目前移动网络中广泛采用的正交频分复用(OFDM)调制的性能恶化。 阅读详情

相关推荐

使用这个算法我可以实现英雄联盟里英雄的走位|Java 开发实战

A算法,A(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。 基本概念 首先在大学我们遇到最多的算法Dijkstra、Floyd、广度搜索、深度搜索。关于这些算法我们以后再慢慢的研究,今天的重点在A算法上。A算法是一种启发式算法。与上述几种算法不同的是A*算法在考虑起始节点的同时还会考虑到目标节点的代价。 在A*算法中我们给每个节点都定义一些属性。最基本的就是下文提到的三基数-这里的三基数是我自己定义.

Java进阶营 312

第九章_字符串处理函数

1

m0_72370216的博客 111

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程

看过我博客的会发现我写了很多CESM的笔记,但是说实话,平时科研我其实更多时候是GEOS-Chemuser。之所以写了很多CESM笔记,其实是因为不会,就边学边写。然后GEOS-Chem已经用比较熟了,所以也没想过做笔记啥的。但是我发现越来越多朋友私信我各种CESM问题,我觉得我可能给大家营造了一种我是CESM达人的错觉。感觉自己有点跑偏了呢。公平起见,我觉得我有必要补充点GEOS-Chem笔记。 GEOS-Chem是研究大气化学的人常用的大气化学传输模式,在全世界范围的大气化学研究组中被广泛使用。不过.

砍柴姑娘Jourosy的博客 1万+

C语言 第九章 字符串

1 字符串定义2 字符数组和字符串2.1 一维字符数组的定义和初始化2.2 二维字符数组的定义和初始化3 字符串输入输出函数3.1 通用3.2 专用3.2.1 单个字符输入输出字符输入函数getchar()/getch()字符输出函数putchar()3.2.2 字符串输入输出字符串输入函数 gets()字符串输入函数 fgets()字符串输出函数 puts( )4 字符串处理函数字符串长度计算-strlen字符串复制函数strcpy字符串链接函数-strcat字符串比较函数-strcmp

C语言/数据结构/数学建模/深度学习/生物信息 4067

抖音批量取消关注神器:5行JS代码搞定,告别手动操作(附详细步骤)

本文介绍了一种利用JS脚本在抖音创作者平台批量取消关注的高效方法。通过浏览器开发者工具执行简单的JavaScript代码,即可自动化模拟点击操作,快速清理大量关注列表,告别繁琐的手动操作。文中提供了详细的步骤和核心代码,适合有一定技术基础的用户参考。

weixin_29009971的博客 592

【TM1650】STM8S TM1650芯片控制程序

以下为.h文件: #ifndef __TM1650_I2C_H #define __TM1650_I2C_H #include "stm8s.h" #include "stm8s_gpio.h" #include "tim1.h" #include "usart2.h" #include &lt;iostm8s103f3.h&gt; #include &lt;intrinsics....

cxw312864660的博客 1万+

C语言 第九章 字符串处理

第九章 字符串处理 磨刀不误砍柴工 本章将要讨论的是字符串、字符串的操作方法、字符串与指针的关系。 9.1 原来如此: 许多语言在内部实现的时候,将字符串当做字符数组来处理,但不知道为什么对程序员却掩盖了这一点。 字符串常量是一个以空白符结尾的一维字符数组,例如: char name[]={‘y’,’a’,’n’,’g’,’f’,’e’,’n’,’g’,’\0’}; 但是

linghunduoshou的专栏 625

Qt Installer Framework4.6.1的最基础使用1(win10+离线安装包 )

因工作需要,win程序发布后,打包成一可执行exe文件,且兼容win7系统笔者记录了一些关键要点,供有需要的小伙伴使用。

aggs1990的专栏 904

第九章 字符串

第九章 字符串 字符串的驻留机制 如果内存中存在字符串的值,内存会直接分配给变量,不再创建新的对象 驻留机制的几种情况: 字符串长度为0或1时 符合标识符的字符串。标识符:数字字母下划线组成的字符串 字符串只在编译时进行驻留,而非运行时 [-5,256]之间的整数 a = 'python' b = "python" c = '''python''' print(a,id(a)) print(b,id(b)) print(c,id(c)) # a,b,c 的id,type,value都相同

qq_42385761的博客 431

【即插即用模块】注意力篇 | TGRS 2025 | SCPP:独家复现!三特征多尺度注意力融合,涨点必备!

摘要:SCPP(Scale-aware Pyramid Pooling)是一种创新的多尺度特征融合模块,专为U型网络瓶颈设计。它通过局部特征提取(1×1卷积)、多尺度膨胀卷积(1/3/5膨胀率分支)和全局特征聚合(全局平均池化)三重结构,结合SE通道注意力机制和自适应加权融合,显著提升特征表达能力。实验表明,SCPP能有效解决边缘模糊和错误检测问题,在遥感图像分割等任务中表现优异。该模块支持即插即用,适用于各类需要多尺度特征增强的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 939

【嘉立创EDA】PCB金属包边设计快捷方法

本文使用嘉立创EDA,描述如何在PCB设计时,快速增加边框包边设计,特别是金属包边(伪)——这里标记(伪)是因为该这里的包边特指不含边缘壁。请参考本文时特别注意!本文将此过程记录,以供有需要的读者参考。

l64481000的博客 1730

《明解C语言》笔记及课后习题答案 【第九章】

练习9-1/*---输出字符数组char str[] = "ABC\0DEF"---*/ #include &lt;stdio.h&gt; int main(void) { char str[] = "ABC\0DEF"; printf("字符串str为\"%s\"。\n", str); return 0; }练习9-2/*---让该初始化赋值得到的字符串s变成空字符串:cha...

VividColors的博客 4037

2018安徽省青少年信息学奥林匹克(AHOI)初中组

12 种合法的排列分别为:1, 3, 2, 4, 2, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 1, 3, 4, 2, 2, 3,4,1,1,4,2,3, 2,4,1,3, 4,1,3,2, 4,2,3,1, 1,4,3,2, 2,4,3,1。分为 2 组,一组的队员实力值是{4, 5, 2, 3},一组是{-4, -3, -5},其中最小的组人数为 3,可以发现没有比 3 更优的分法了。[0, 1, 1, 2]同样不是合法的分组方案,因为出现了两个实力值为 1 的选手。

weixin_42358969的博客 1142

python教程知识(第九章)

python知识

zzj13283671195的博客 642

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C语言--第九章 字符串、字符和字节

介绍一些字符串操作函数

m0_46636156的博客 256

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java基础-第九章 字符串

在Java中,字符串(String)是一种非常重要的数据类型,用于表示文本数据。字符串是字符的序列,可以包含0个或多个字符,并且这些字符可以是字母、数字、空格、标点符号等。普通的字符串一旦创建其内容无法更改,即使使用+进行添加,也是在内存中创建了一个新对象来存储新值。这样会消耗更多内存,于是后来的jdk提供来解决这个问题。StringBuilder 类允许你在运行时动态地修改字符串数据。由于 String 类是不可变的,这意味着一旦创建了一个 String 对象,你就不能更改它的内容。

m0_74606902的博客 1069

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

第九章 字符串操作

使用“+”运算符可完成对多个字符串的拼接,“+”运算符可以连接多个字符串并产生一个字符串对象。字符串不允许直接与其他类型的数据拼接。

qq_42226855的博客 212

第九章 Lua字符串

1.Lua 语言中字符串可以使用以下三种方式来表示: 单引号间的一串字符。 双引号间的一串字符。 [[和]]间的一串字符。 string1="Lua" string2='runoob.com' string3=[["Lua 教程"]] 2. 字符串转义符: \a \b \f \n \r \t \v \\ \...

qq_37765916的博客 268

汇编语言:基于x86处理器考前笔记 | 第九章 字符串和数组

ESI</u>寻址的内存地址处的数据复制到<u>EDI</u>寻址的内存其中<u>rep</u>会按照<u>ECX</u>的值重复执行指令MOVSDESIEDI自动进行相应偏移CMPSBCMPSWCMPSDESIEDI可结合无符号数跳转指令SCASBSCASWSCASDALAX<u>EAX</u>中的值同<u>EDI</u>寻址的目标内存比较REP使用,其循环终止条件为找到了匹配的内容STOSBSTOSWSTOSDALAX<u>EAX

everfoot的博客 532

C++ Primer Plus 第九章编程题练习

C++ Primer Plus 第九章编程题练习

南明离火的博客 578

第九章 字符串、字符和字节[C和指针]

字符串是一种重要的数据类型,但是C语言并没有显式字符串数据类型,因为字符串以字符串常量的形式出现或存储于字符串数组中。 常用字符串函数如下: /*字符串长度计算函数 strlen,返回字符数*/ size_t strlen(char const *string) 不受限的字符串函数 /*字符串拷贝函数strcpy,返回值是第一个参数的拷贝*/ char strcpy(char *d

小角色的专栏 1052

第九章《字符串》第2节:字符串常用操作

在实际开发过程中,程序员往往要对字符串进行比较内容、搜索、替换、截取等操作。在String类中,针对这些常用的操作都定义了相应的方法,本小节将详细讲述字符串的常用操作。

穆哥学堂--Java学习园地 533

第九章 字符串

1、字符串的驻留机制 2、字符串的常用操作 3、字符串的比较 4、字符串的切片操作 5、格式化字符 6、字符串的编码转换

bibifight的博客 125

C++ primer plus 第九章作业习题答案

C++ primer plus 第九章作业习题答案9.1 自己编写的答案,希望大家一起研究 9.1 //golf.h #ifndef GOLF_H_ #define GOLF_H_ const int Len = 40; struct golf { char fullname[Len]; int handicap; }; //non-interactive version: //...

qq_42632671的博客 600

【算法设计与分析】第九章 字符串算法

第九章 字符串算法(2021/11/27-by-tycube) 9.1 精确字符串匹配 9.1.1 问题描述: 给定文本TTT和模式PPP,要求返回文本TTT能对应上模式PPP的第一个位置,即满足T[s...s+m−1]=P[0...m−1]T[s...s+m-1]=P[0...m-1]T[s...s+m−1]=P[0...m−1]时T[s]T[s]T[s]的最小下标. 9.1.2 解题思路: 暴力搜索 Rabin-Karp算法 2.1 基本思想:基于指纹的思想。 指纹思想:对于给定

Dongsheng66的博客 695

第九章 Python入门系列之字符串处理

下标计算机为数据序列中每个元素分配的从0开始的编号切片序列名 [ 开始位置下标 : 结束位置下标 : 步长 ]常用操作方法find()index()

不求上进的码农的博客 904
上一篇: 第八章:动态内存申请
下一篇: 第十章 结构体
七号公园的忧伤
七号公园的忧伤 新星创作者: Java技术领域 新星创作者: Java技术领域
博客等级 码龄6年 4857粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七号公园的忧伤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值