第10讲 字符串处理

合集下载

S7-1200第10讲:扩展指令讲解1-日期和时间、字符串+字符

S7-1200第10讲:扩展指令讲解1-日期和时间、字符串+字符
博途1200课程--第10讲
--------------日期和时间、字符串+字符
日期和时间
● T_CONV:将值在以(日期和时间数据类型) 及(字节、字和双字大小数据类型)之间进行转 换
● T_ADD 将 Time 值与 DTL 值相加: (Time + Time = Time) 或 (DTL + Time = DTL)
DTL DTL(日期和时间长型)数据类型使用 12 个字节的结构保存日期和时间信 息。可以在块的临时存储器或者 DB 中定义 DTL 数据。 必须在 DB 编辑器 的“起始值”(Startvalue) 列为所有组件输入一个值。
DTL 的大小和范围
DTL 结构的元素
● T_CONV:将值在(日期和时间数据类型)以及(字节、字和双字大 小数据类型)之间进行转换
WChar在存储器中占一个字的空间,可包含任意双字节字符表示形式。 编辑器语法在字符的前面和后面各使用一个单引号字符。可以使用可见字 符和控制字符。
String 和 WString CPU 支持使用 String 数据类型存储一串单字节字符。 String数据类型包 含总字符数(字符串中的字符数)和当前字符数。 String 类型提供了多达 256个字节,用于在字符串中存储最大总字符数(1 个字节)、当前字符 数(1个字节)以及最多 254 个字节。 String 数据类型中的每个字节都可 以是从 16#00 到16#FF 的任意值。
初始化 String 数据 在执行任何字符串指令之前,必须将 String输入和输出数据初始化为存 储器中的有效字符串。
有效 String 数据 有效字符串的最大长度必须大于 0 但小于 255。当前长度必须小于等 于最大长度。字符串无法分给 I 或 Q 存储区。

[Python程序设计基础(第2版)][李东方 (10)[19页]

[Python程序设计基础(第2版)][李东方 (10)[19页]

创建正则表达式对象p:
p=pile('''[0-9a-zA-Z\_] #匹配1个数字、字母或下画线
AA?
#后面跟A或 AA
(0*)$
#由若干个0结尾
''',re.I|re.X) #忽略大小写、忽略空格并允许当中整行加注释
10.2.1 匹配与搜索
匹配与搜索函数通常有match()、search()和findall(),它们的 作用和用法相似,通常有两种使用方法。 ① 作为正则表达式编译对象p的方法使用:
import re
p=pile('^[a-zA-Z0-9]{1,10}@[a-zA-Z0-9]{1,10}.(com|org)$',re.I)
re.match(pattern, string[,flag]) re.search(pattern, string[,flag]) re.findall(pattern, string[,flag])
【例10-1】 假定某E-mail地址由三部分构成:英文字母或数字(1~10 个字符)、“@”、英文字母或数字(1~10个字符)、“.”,最后以com 或org结束,其正则表达式为:'^[a-zA-Z0-9]{1,10}@[a-zA-Z09]{1,10}.(com|org)$'是否符合设定规则。
第10章 正则表达式的应用
本章教学目标:
理解正则表达式的基本语法规则。 学会用re库的内置函数进行匹配、搜索、分组、 替换等字符串操作。 了解和体验简单爬虫自动获取网页资源的方法。
10.1 正则表达式
正则表达式(regular expression)是由一些特 定字符及其组合所组成的字符串表达式,用来对 目标字符串进行过滤操作。

第10章成绩统计——数组与字符串

第10章成绩统计——数组与字符串

10.4.2 数组排序
• 按从小到大的顺序进行排序方法sort,调用形式主要有二: Arrays.sort(数组实例名) Arrays.sort(数组实例名, 起始索引, 终止索引) • 第二种形式元素范围从起始索引到终止索引减1之间的元素。 • 【例10-5】编程,按升序输出int[]型数组的所有元素。 int[] nums = {71, 62, 93, 84, 95, 56, 87, 78, 69, 80}; System.out.println("排序之前的数组元素:"); System.out.println(Arrays.toString(nums)); System.out.println("排序之后的数组元素:"); Arrays.sort(nums); System.out.println(Arrays.toString(nums));
【例10-2】编程,使用声明、创建、元素赋值3个步 骤建立学生成绩数组,并统计平均成绩。
… int[] nums; //声明数组变量 nums = new int[10]; //创建数组实例 nums[0] = 71; nums[1] = 62; nums[2] = 93; nums[3] = 84; nums[4] = 95; nums[5] = 56; nums[6] = 87; nums[7] = 78; nums[8] = 69; nums[9] = 80; int sum = 0; double average;
【例10-3】编程,创建int[][]类型的二维数组,计算每行 元素的平均值。 int[][] nums = new int[][]{ //声明、创建二维数组 {71, 62, 93, 84}, //第0行4个元素 {95, 56, 87, 78}, //第1行4个元素 {69, 80} }; //第2行2个元素 System.out.println("二维数组所有元素值如下:"); for(int i=0; i<nums.length; i++){ //i控制行 double rowSum = 0; for(int j=0; j<nums[i].length; j++){ //j控制列 System.out.print(nums[i][j]+ " "); rowSum += nums[i][j]; } System.out.println("\t\t本行平均值" + rowSum/nums[i].length ); }

现代密码学第十讲身份鉴别协议(精)

现代密码学第十讲身份鉴别协议(精)
声称者解密用它的公钥加密的挑战 声称者数字签署一个挑战
31
挑战-应答身份鉴别协议
基于公钥加密的挑战-响应
单向认证:
r为随机数
双向认证:
r1, r2为随机数
32
挑战-应答身份鉴别协议
基于数字签名的挑战-响应
带时戳的单向认证:
certA,certB为公钥证书; SA,SB为私钥;
20
口令认证协议
5)一次口令(向强口令的过渡) 防止窃听和随后的口令重放(无时变参数) 解决办法:每个口令只用一次 变体:
一次口令的共享列表 顺序更新一次口令 基于单向函数的一次口令序列:
21
口令认证协议
一次口令的共享列表 用户和系统都同意一个口令列表。列表中的每一个口令只能使用一次。 首先,系统和用户都要保存一个长的口令列表。其次,如果用户不按次序使用口
6
身份鉴别的定义
身份鉴别的定义: 1、在诚实的情况下,声称者A能向验证者B
证明他确实是A; 2、在声称者A向验证者B声称他的身份后,
验证者B不能获得任何有用的信息,B也不 能模仿A向其他第三方证明他就是A。 3、任何不同于A的实体C以A的身份,让B相 信C是A的概率可忽略不计
7
身份鉴别的定义
用于实现身份识别的协议。
带随机数的单向认证:
带随机数的双向认证:
33
挑战-应答身份鉴别协议
3)基于零知识证明的挑战-应答
零知识(Zero-knowledge)(ZK)证明的起源
Alice:我知道肯德基的土豆泥的配方以及做法。 Bob:不,你不知道。 Alice:我知道。 Bob:你不知道。 Alice:我确实知道! Bob:请你证实这一点! Alice:好吧,我告诉你!(她悄悄地说出了土豆泥的秘方) Bob:太有趣了!现在我也知道了。我要告诉《华盛顿邮报》 Alice:啊呀!

计算机二级C语言辅导 10章 字符串

计算机二级C语言辅导 10章 字符串

例2. 删除一个字符串中的一个字符。 字符串由标准输入得到,欲删除的字符也由标准输入得到
main ( ) { char s[20],c; int i,j; gets(s); c=getchar( ); for (i=j=0;s[i]!=„\0‟;i++) if (s[i]!=c) s s[j++]=s[i]; s[j]=„\0‟; c=l }
p
i j
i j
i j
i
j
i
W
0
o
1
r
2
l
3
d
4
\0
5
例2. 删除一个字符串中的一个字符。 字符串由标准输入得到,欲删除的字符也由标准输入得到
main ( ) { char s[20],c; int i,j; gets(s); c=getchar( ); for (i=j=0;s[i]!=„\0‟;i++) if (s[i]!=c) s s[j++]=s[i]; s[j]=„\0‟; c=l }
H o w \0
0 1 2 3 4 5 6 7 8 9 10 11 12
字符数组
五、字符串处理函数: 1.puts(字符数组); 将字符串输出到终端,在输出时将字符串结束标记‘\0‟转换成‘\ char str[ ]={“China\nBeijing”}; puts(str); 输出:China Beijing 2.gets(字符数组)--读入全部字符(包括空格),直到遇到回车符为止 从终端输入一个字符串到字符数 如果输入以下12个字符: 组,并且得到一个函数值,该函 数值是字符数组的起始地址。
第十章 字符串
在C语言中,没有字符串这种数据类型, 因此可以将字符串存放在字符数组中。 这是处理字符串的方法之一。

第10讲 IDS-理论

第10讲 IDS-理论

• 神经网络
– 利用神经网络检测入侵的基本思想是用一系列信息 单元(命令)训练神经元,这样在给定一组输入 后,就可能预测出输出。与统计理论相比,神经网 络更好地表达了变量间的非线性关系,并且能自动 学习和更新。实验表明UNIX系统管理员的行为几 乎全是可以预测的,对于一般用户,不可预测的行 为也只占了很少的一部分。 – 入侵检测的神经网络示意图:
• Honeynet不是一个单独的系统而是由多个系统和多个攻 击检测应用组成的网络 • 所有放置在Honeynet中的系统都是标准的产品系统
2.5 入侵响应技术
•基本情况
–入侵响应是入侵检测的配套技术,一般的入 侵检测系统会同时使用这两种技术。根据系 统设计的功能目的不同,我们有时也称专门 或以实施入侵响应技术为主的系统为入侵响 应系统。 –入侵响应技术可分为主动响应和被动响应两 种类型。
– 加载入侵检测技术的系统我们称之为入侵检测系统(IDS, Intrusion Detection System),一般情况下,我们并不严 格的去区分入侵检测和入侵检测系统两个概念,而都称为 IDS或入侵检测技术。
• IDS相关概念
– 漏洞:
• 漏洞是指系统硬件、操作系统、软件、网络协议等在设计 上、实现上出现的可以被攻击者利用的错误、缺陷和疏 漏。入侵一般需要利用漏洞。 • 按照漏洞的性质,现有的漏洞主要有:缓冲区溢、拒绝服 务攻击漏洞、代码泄漏、信息泄漏漏洞、配置修改、系统 修改漏洞、脚本执行漏洞、远程命令执行漏洞和其它类型 的漏洞
• 被动:只能检测出已知攻击 、新类型的攻击会对系统造成很大的威 • 模式库的建立和维护难:模式库要不断更新,知识依赖于硬件平台、操 作系统和系统中运行的应用程序等
? 高级技术:
– 专家系统

第10章 预处理命令

第10章 预处理命令

第十章预处理命令所谓编译预处理是指,在对源程序进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。

一、宏定义与符号常量在C语言中,“宏”分为无参数的宏(简称无参宏)和有参数的宏(简称有参宏)两种。

无参宏定义1.无参宏定义的一般格式#define 标识符字符串其中:“define”为宏定义命令;“标识符”为所定义的宏名,通常用大写字母表示,以便于与变量区别;“字符串”可以是常数、表达式、格式串等。

2.使用宏定义的优点(1)可提高源程序的可维护性(2)可提高源程序的可移植性(3)减少源程序中重复书写字符串的工作量例9.1 输入圆的半径,求圆的周长、面积和球的体积。

要求使用无参宏定义圆周率。

/*程序功能:输入圆的半径,求圆的周长、面积和球的体积。

*/#define PI 3.1415926 /*PI是宏名,3.1415926用来替换宏名的常数*/void main(){float radius,length,area,volume;printf("Input a radius: ");scanf("%f",&radius);length=2*PI*radius; /*引用无参宏求周长*/area=PI*radius*radius; /*引用无参宏求面积*/volume=PI*radius*radius*radius*3/4; /*引用无参宏求体积*/printf("length=%.2f,area=%.2f,volume=%.2f\n", length, area, volume);}3.说明(1)宏名一般用大写字母表示,以示与变量区别。

但这并非是规定。

(2)宏定义不是C语句,所以不能在行尾加分号。

否则,宏展开时,会将分号作为字符串的1个字符,用于替换宏名。

(3)在宏展开时,预处理程序仅以按宏定义简单替换宏名,而不作任何检查。

BCB第十讲文件读写操作

BCB第十讲文件读写操作

文件读写操作上一讲我们学习了事件和事件处理函数的有关知识,并为Mp3Collect程序添加的进行记录操作的代码,但是程序还缺少保存记录的功能,以至于当程序退出之后,我们辛苦输入的记录就丢失了,因此在本讲中,我们就首先来学习有关文件读写操作的知识,然后继续添加事件处理函数,实现查询记录的功能。

在应用程序中保存信息和数据的常用方法有三种:第一种是保存在Windows的注册表中,第二种是保存在程序专用的文件中,第三种则是保存在数据库中。

第一种方法只适合于保存少量关键的信息,例如程序的参数和选项,对于我们的例子程序来说,歌曲记录的数量可以是非常多的,因此不适合保存在注册表中。

第二种方法是最常用的,也比较容易实现,因此现在我们先采用第二种方法来保存记录。

第三种方法对于保存大量结构化的数据是最有效的,例如Mp3Collect的歌曲记录,但实现起来相对要复杂得多,在讲座的后面我们再来学习数据库操作方法。

用于文件操作的函数也有很多种,我们选择使用I/O流函数和FILE *指针来进行对文件的操作,因为这些函数符合ANSI C/C++规范,可移植性较好,能够用于Win32、Unix平台,是比较常用的文件操作方式。

I/O流函数和FILE结构的声明和定义位于头文件stdio.h中。

保存记录文件首先,为主窗体类添加一个SaveFile()成员函数。

在类浏览器中找到TMainForm类,用右键单击该类,在关联菜单中选择NewMethod命令,就会弹出如图10-1所示的AddMethod对话框。

在其中的Method Name中输入新的成员函数名SaveFile,函数的参数(Arguments)为空,返回类型为void,即没有返回值。

函数的访问权限为私有的(Private),函数的调用方式为__fastcall,这是因为按照CBuilder的规定,所有窗体类的成员函数的调用方式都必须为__fastcall方式。

设置好这些函数属性后,按下“OK”按钮,CBuilder就会自动添加好SaveFile()函数的框架。

C语言全国计算机二级等级考试教程第10章 字符串(章节带习题)

C语言全国计算机二级等级考试教程第10章  字符串(章节带习题)

输出时直到遇第一 char str[ ]=“I love you!” , *p=str; 个‘\0‟结束输出。 字符指针变量 printf(“%s\n” , p); 字符数组名
输入项 字符指针变量
转去介绍
10.3 字符串的输入和输出
字符数组名
输入项
字符指针变量 当字符数组名作为输入项: char str[15]; scanf(“%s”,str); 在内存中的形式是: P R 输入形式为: PROGRAMMING<CR> O G R A M M I N Ga赋初值后的存储示意图
10.4 字符串数组
可以定义字符型指针数组并通过赋初值来构成一个类似的字符串数组。 例如:char *pa[3]={“a”, ”bb”, ”ccc”}; 定义了一个字符型指针数组,该数组中含有3个元素pa[0] 、pa[1]、 pa[2],且每一个 元素都是一个指向字符串的指针。
则在str中存入的只是字符串“APROGRAM”,而不是字符串“APROGRAM MING
10.3 字符串的输入和输出
10.3.3 调用gets、puts函数在终端输入或输出一行字符串
调用gets函数来输入字符串,例如: char str[15]; gets( str ); 在内存中的形式是: A P 若从键盘上依次输入: APROGRAM MING<CR> R O G R A M M I N G \0 \0
★ 两个字符串分别占有不同的存储空间。 ★ 指针变量pmark中的地址可以改变而指向另外一个长度 不同的字符串。
10.3 字符串的输入和输出
10.3.1 输入和输出字符串时的必要条件
输入和输出的格式说明符为 %s 对字符串输入输出时的必要条件: 字符串常量 输出项 字符数组名 printf(“%s\n” , ”I love you!”); char str[ ]=“I love you!”; printf(“%s\n” , str); I love you!

[汇编]《汇编语言》第10章CALL和RET指令

[汇编]《汇编语言》第10章CALL和RET指令

[汇编]《汇编语⾔》第10章CALL和RET指令王爽《汇编语⾔》第四版超级笔记⽬录第10章 CALL和RET指令call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。

它们经常被共同⽤来实现⼦程序的设计。

这⼀章,我们讲解call和ret指令的原理。

10.1 ret和retf、call指令ret指令⽤栈中的数据,修改IP的内容,从⽽实现近转移;retf指令⽤栈中的数据,修改CS和IP的内容,从⽽实现远转移。

CPU执⾏ret指令时,进⾏下⾯两步操作:(IP)=((ss)x16+(sp))(sp)=(sp)+2CPU执⾏retf指令时,进⾏下⾯4步操作:(IP)=((ss)x16+(sp))(sp)=(sp)+2(CS)=((ss)x16+(sp))(sp)=(sp)+2可以看出,如果我们⽤汇编语法来解释ret和retf指令,则:CPU执⾏ret指令时,相当于进⾏:pop IPCPU执⾏retf指令时,相当于进⾏:pop IPpop CS下⾯的程序中,ret指令执⾏后,(IP)=0,CS:IP指向代码段的第⼀条指令。

assume cs:codestack segmentdb 15 dup (0)stack endscode segmentmov ax,4c00hint 21hstart: mov ax,stackmov ss,axmov sp,16mov ax,0push axmov bx,0retcode endsend start下⾯的程序中,retf指令执⾏后,CS:IP指向代码段的第⼀条指令。

assume cs:codestack segmentdb 16 dup (0)stack endscode segmentmov ax,4c00hinc 21hstart: mov ax,stackmov ss,axmov sp,16mov ax,0push cspush axmov bx,0retfcode endsend startCPU执⾏call指令时,进⾏两步操作:(1)将当前的IP或CS和IP压⼊栈中;(2)转移。

第10章 sed 用 法 介 绍

第10章 sed 用 法 介 绍

这个模式查询以ing结尾的任意单词。
10.4.8 首行
要打印文件第一行,使用行号:
93
第10章 sed 用 法 介 绍
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句
如果不特别声明,sed例子中使用下述文本文件quote.txt。
10.3 sed和正则表达式
sed识别任何基本正则表达式和模式及其行匹配规则。记住规则之一是:如果要定位一特
殊字符,必须使用(\)屏蔽其特殊含义,如有必要请参照第 7章正则表达式。第7章使用的所
p 打印匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
示打印定位(匹配)行。
Hale Waihona Puke 10.4.2 打印范围 可以指定行的范围,现打印1到3行,用逗号分隔行号。
92
第二部分 文 本 过 滤
下载
sed脚本文件 [选项] 输入文件
不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件, sed从标准输入中
接受输入,一般是键盘或重定向结果。
sed选项如下:
n 不打印;sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以
91
第10章 sed 用 法 介 绍
有正则表达式在sed中都是合法的。
10.4 基本sed编程举例
下面通过例子实际检验一下sed的编辑功能。
10.4.1 使用p(rint)显示行
print命令格式为[address[,address]P。显示文本行必须提供sed命令行号。
错误在哪儿?原意只打印第二行,但是却打印了文件中所有行,为此需使用 -n选项,显

HTML教程 10第十章

HTML教程 10第十章

第十章 表单本章既是HTML 的最后一章,又是学习JavaScript 、继而全面学习动态网页编程的基础,具有承前启后、继往开来的重要作用。

这是因为:前面的HTML 语法都是用来编写纯静态网页的,即网页编写好之后,在浏览器中的内容不会发生变化。

而表单则是用来和用户交互的,用户可以改变表单中的内容,网页从而具备了和用户交互的功能。

这是表单的质的飞跃。

但要真正发挥动态网页的强大功能,则必学JavaScript 。

如果要在动态网页中增加数据库功能,则必须继而学习ASP .NET 、JSP 、PHP 之一。

本章局限在HTML 范围内,讲解表单的基本用法。

10.1 什么是表单什么是表单(form )?表单是浏览者与网站实现互动的重要手段,它的主要功能是收集网站所需的信息。

例如,当在网上申请电子邮件信箱时,就需要填写表单。

下图所示的是申请新浪邮箱时所要填写的表单。

要创建表单,需要使用<form>和</form>标记,在它们之间的一切都属于表单的内容。

其语法格式为: <form name = 表单名 action = 表单处理程序或网页 method = "get"或"post" target = 目标窗口的打开方式 enctype = MIME 类型>图 浏览结果表单内容</form>再看具体的例子前,必须详细讲解<form>的各个属性。

(1)name属性用于定义表单名称。

表单可以看成一个对象,该对象有对象名后,就可方便地在程序(例如JavaScript)中引用表单了。

(2)action属性的值是处理程序的程序或网页名(包括网络路径),即设置将表但数据提交给谁处理。

例如:<form action = "/test.aspx">它说明:当用户提交表单时,服务器将执行网址/上的名为test.aspx的 程序。

第10章 字符串数组(培训)

第10章 字符串数组(培训)

C语言程序设计
国家等级考试练习 1.有以下程序: main() {char ch[ ]="uvwxyz",*pc; pc=ch; printf("%c\n",*(pc+5)); printf("%c\n",*pc++); printf("%c\n",*pc++); } z 输出结果是: u v
C语言程序设计
C语言程序设计
10.2
使指针指向一个字符串
1 通过赋初值的方式使指针指向一个字符串 char *ps1="form one"; char str[]="form one",*ps2=str; 指针变量中保存的是字符串常量或字符串数组的首地址
C语言程序设计
2 通过赋值运算使指针指向一个字符串 char *ps1; ps1="form one"; char str[ ]="form two",*ps2; ps2=str; 3 用字符数组作为字符串和用指针指向字符串之间 的区别 char mark[ ]="program"; char *pmark[ ]="program";
C语言程序设计
4.以下程序运行后的输出结果是: bcdefgha #include <string.h> char *ss(char *s) { char *p,t; p=s+1; t=*s; while(*p) {*(p-1)=*p; p++; } *(p-1)=t; return s; } main() {char *p ,str[10]="abcdefgh"; p=ss(str); printf("%s\n",p); }

LinuxC函数之字符串处理函数

LinuxC函数之字符串处理函数

LinuxC函数之字符串处理函数字符串处理函数(13, 19)这些函数的头文件都是string.h非str前缀的字符串操作bcmp: 比较内存中的内容, 建议用memcmp()取代函数定义: int bcmp(const void *s1, const void *s2, int n);说明: 用来比较s1和s2所指的内存区前n个字节, 若参数n为0, 则返回0. 若参数s1和s2所指的内存完全相同返回0值, 否则返回非0值.bcopy: 拷贝内存内容, 建议用memcpy()取代函数定义: void bcopy(const void *src, void *dest, int n);说明: bcopy()和memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址, 不过, 参数scr和dest在传给函数时位置是相反的.bzero: 将一段内存内容全清为0, 建议用bzero()取代函数定义: void bzero(void *s, int n);说明: bzero()会将参数s所指的内存区域前n个字节, 全部设为0. 相当于调用memset(void *s, 0, size_t n);ffs: 在一个整型数(2进制表示)中查找第一个值为1的位函数定义: int ffs(int i);说明: ffs()会由低位至高位, 判断参数i的2进制中每一位, 将最先出现位的值为1的位置返回. 若i为0, 返回0.应用举例:#include <stdio.h>#include <string.h>int main(void){int num[7] = {0, 1, 2, 3, 4, 5, 8};int i;for(i = 0; i < 7; i++){printf("%d: %d\n", num[i], ffs(num[i]));}return 0;}运行结果:0: 0 1: 1 2: 2 3: 1 4: 3 5: 1 8: 4index: 查找字符串中第一个出现的指定字符函数定义: char *index(const char *s, int c);说明: index()用来找出参数s字符串中第一个出现的参数c的地址, 然后将该字符出现的地址返回, 结束符也视为字符串的一部分. 返回值, 如果找到指定的字符则返回该字符所在地址, 否则返回0.rindex: 查找字符串中最后一个出现的指定字符函数定义: char *rindex(const char *s, int c);说明: rindex()用来找出参数s字符串中最后一个出现的参数c的地址, 然后将该字符出现的地址返回, 结束符也视为字符串的一部分. 返回值, 如果找到指定的字符则返回该字符所在地址, 否则返回0.应用举例:#include <stdio.h>#include <string.h>int main(void){const char *s = "1234556554321";char *p;printf("%s\n", s);printf("%s\n", index(s, '5'));printf("%s\n", rindex(s, '5'));p = memchr(s, '5', 3);if(p == NULL)printf("NULL\n");elseprintf("%s\n", p);printf("%s\n", memchr(s, '5', 8));return 0;}运行结果:123455655432155655432154321NULL556554321memchr: 在某一内存范围中找一特定字符函数定义: void *memchr(const void *s, int c, size_t n);说明: memchr()从头开始搜寻s所指内存的前n个字节, 直到发现第一个值为c的字符, 则返回指向该字符的指针. 如果找不到就返回0.应用举例: 见index和rinedxmemcmp: 比较内存内容函数定义: int memcmp(const void *s1, const void *s2, size_t n);说明: memcmp()用来比较s1和s2所指的内存区间前n个字符. 字符串大小的比较是以ASCII表上的顺序来决定, 此顺序亦为字符的值. memcmp()首先将s1第一个字符值减去s2第一个字符值, 若差值为0则再继续比较下个字符, 若不为0则将等差值返回. 返回值, 若s1和s2相等则返回0, 若s1大于s2则返回大于0的值, 若s1小于s2则返回小于0的值.应用举例:#include <stdio.h>#include <string.h>int main(void){const char *s1 = "123asd";const char *s2 = "123edf";int nR;nR = memcmp(s1, s2, sizeof(s1));if(nR == 0)printf("0\n");else if(nR > 1)printf("1\n");elseprintf("-1\n");return 0;}运行结果:-1memset: 将一段内存空间填入某值函数定义: void *memset(void *s, int c, size_t n);说明: memset()会将参数s所指向的内存区域前n个字节以参数c填入, 然后返回指向s的指针. 在编写程序时, 若需要将某一数组初始化, 使用memset(). 返回指向s的指针. 注意, 参数c虽然声明为int, 但必须是unsigned char, 所以范围在0到255之间.应用举例:#include <stdio.h>#include <string.h>int main(void){char s[5];memset(s, 'a', sizeof(s));s[4] = '\0';printf("%s\n", s);return 0;}运行结果:aaaamemfrob: 对内存区域编码, Linux特有函数定义: void *memforb(void *s, size_t n);说明: memfrob()用来将参数s所指的内存空间前n个字符与42作XOR运算, 用途是可以隐藏一特定字符串内容, 只要再用相同的参数调用memfrob()即可将内容还原.应用举例:#include <stdio.h>#include <string.h>int main(void){char s[] = "Funtion memfrob tests.";printf("%s\n", s);memfrob(s, strlen(s));printf("%s\n", s);memfrob(s, strlen(s));printf("%s\n", s);return 0;}运行结果:Funtion memfrob tests.l_D^CEDGOGLXEH^OY^YFuntion memfrob tests.memcpy: 拷贝内存内容函数定义: void *memcpy(void *dest, void *scr, size_t n);说明: memcpy()用来拷贝src所指的内存前n个字节到dest所指的地址上. 于strcpy()不同, memcpy()会完整的复制n个字节, 不会因遇到结束符'\0'而结束. 返回指向dest的指针. 注意, 指针src和dest所指的内存区域不可重叠.memccpy: 拷贝内存内容函数定义: void *memccpy(void *dest, const void *src, int c, size_t n);说明: memccpy()用来拷贝src所指的内存前n个字节到dest所指的地址上. 与memcpy()不同的是, memccpy()会在复制时检查参数c是否出现, 若是出现则返回dest中的值为c的下一个字节地址. 返回0表示在scr中前n个字节中没有c.memmove: 拷贝内存内容函数定义: void *memmove(void *dest, const void *src, size_t n);说明: memmove()和memcpy()一样用来拷贝src所指的内存前n个字节到dest所指的地址上. 不同的是memmove()的scr和dest 所指的内存区域可以重叠. 返回值指向dest的指针.应用举例:#include <stdio.h>#include <string.h>int main(void){char src[] = "abcdefghi\0";char dest1[10];char dest2[10];char dest3[10];printf("%s\n", src);memcpy(dest1, src, 10);memccpy(dest2, src, 'c', 10);//没用明白memmove(dest3, src, 10);printf("%s\n", dest1);printf("%s\n", dest2);printf("%s\n", dest3);return 0;}运行结果:abcdefghiabcdefghiabcx<abcdefghiabcdefghistr前缀的字符串操作1. 字符串比较strcmp: 比较字符串函数定义: int strcmp(const char *s1, const char *s2);说明: strcmp()用来比较参数s1和s2字符串. 字符串大小的比较是以ASCII码表上的顺序来决定, 此顺序亦为字符的值. strcmp()首先将s1第一个字符值减去s2第一个字符值,若差值为0则再继续比较下个字符, 若差值不为0则将差值返回. 若参数s1和s2字符串相同则返回0, s1若大于s2则返回大于0的值, s1若小于s2则返回小于0的值.strncmp: 比较字符串(指定数目)函数定义: int strncmp(const char *s1, const char *s2, size_t n);说明: strncmp()用来比较参数s1和s2字符串前n个字符. 若参数s1和s2字符串相同则返回0, s1若大于s2则返回大于0的值, s1若小于s2则返回小于0的值.strcasecmp: 忽略大小写比较字符串函数定义: int strcasecmp(const char *s1, const char *s2);说明: strcasecmp()用来比较参数s1和s2字符串, 比较时会自动忽略大小写的差异. 若参数s1和s2字符串相同则返回0, s1若大于s2则返回大于0的值, s1若小于s2则返回小于0的值.strncasecmp: 忽略大小写比较字符串(指定数目)函数定义: int strncasecmp(const char *s1, const char *s2, size_t n);说明: strncasecmp()用来比较参数s1和s2字符串前n个字符, 比较时会自动忽略大小写的差异. 若参数s1和s2字符串相同则返回0, s1若大于s2则返回大于0的值, s1若小于s2则返回小于0的值.strcoll: 采用目前区域的字符排列次序来比较字符串函数定义: int strcoll(const char *s1, const char *s2);说明: strcoll()会依环境变量LC_COLLATE所指定的文字排列次序来比较s1和s2字符串. 若参数s1和s2字符串相同则返回0, s1若大于s2则返回大于0的值, s1若小于s2则返回小于0的值.附加说明: 若LC_COLLATE为“POSIX”或“C”, 则strcoll()与strcmp()作用完全相同.应用举例:#include <stdio.h>#include <string.h>int main(void){char *src = "abcdefefdsa";char *cmp = "abcdEFe";printf("%d ", strcmp(src, cmp));printf("%d ", strncmp(src, cmp, 6));printf("%d ", strcasecmp(src, cmp));printf("%d ", strncasecmp(src, cmp, 6));printf("\n");return 0;}运行结果:1 32 102 02. 字符串连接strcat: 连接两个字符串函数定义: char *strcat(char *dest, const char *src);说明: strcat()会将参数src字符串拷贝到参数dest所指的字符串尾. 注意, 第一个参数dest要有足够的空间来容纳要拷贝的字符串. 返回参数dest的字符串起始地址.strncat: 连接两个字符串(指定数目)函数定义: char *strncat(char *dest, const char *src, size_t n);说明: strncat()会将参数src字符串拷贝n个字符到参数dest所指的字符串尾. 注意, 第一个参数dest要有足够的空间来容纳要拷贝的字符串. 返回参数dest的字符串起始地址.应用举例:#include <stdio.h>#include <string.h>int main(void){char *src = "abcdefghi";char dest1[30] = "jklmn";char dest2[30] = "jklmn";printf("%s\n", src);printf("%s\n", dest1);strcat(dest1, src);printf("%s\n", dest1);strncat(dest2, src, 6);printf("%s\n", dest2);return 0;}运行结果:abcdefghijklmnjklmnabcdefghijklmnabcdef3. 字符串查找strchr: 查找字符串中第一个出现的指定字符函数定义: char *strchr(const char *s, int c);说明: strrchr()用来找出参数s字符串中第一个出现的参数c地址, 然后将该字符出现的地址返回. 如果找不到就返回0.strrchr: 查找字符串中最后一个出现的指定字符函数定义: char *strrchr(const char *s, int c);说明: strrchr()用来找出参数s字符串中最后一个出现的参数c地址, 然后将该字符出现的地址返回. 如果找不到就返回0.strpbrk: 查找字符串中第一个出现的多个指定字符中的一个字符函数定义: char *strpbrk(const char *s, const char *accept);说明: strpbrk()用来找出参数s字符串中最先出现存在参数accept字符串中的任意字符. 如果找不到返回0.strstr: 在一字符串中查找指定的字符串函数定义: char *strstr(const char *haystack, const char *needle);说明: strstr()会从字符串haystack中搜寻字符串needle, 并将第一次出现的地址返回. 如果找到指定的字符则返回该字符所在地址,否则返回0.strcspn: 返回字符串中从头开始连续不含指定字符串内容的字符数函数定义: size_t strcspn(const char *s ,const char *reject);说明: strcspn()从参数s字符串的开头计算连续的字符, 而这些字符都完全不在参数reject所指的字符串中. 简单地说, 若strcspn()返回的数值为n, 则代表字符串s开头连续有n个字符都不含字符串reject内的字符.strspn: 返回字符串中从头开始连续含指定字符串内容的字符数函数定义: size_t strspn(const char *s, const char *accept);说明: strspn()从参数s字符串的开头计算连续的字符, 而这些字符都完全是accept所指字符串中的字符. 简单的说, 若strspn()返回的数值为n, 则代表字符串s开头连续有n个字符都是属于字符串accept内的字符.应用举例:#include <stdio.h>#include <string.h>int main(void){char *src = "15648499166581";char *pchr, *prchr, *ppbrk, *pstr;int ncspn, nspn;pchr = strchr(src, '5');prchr = strrchr(src, '5');ppbrk = strpbrk(src, "6489");pstr = strstr(src, "849");ncspn = strcspn(src, "489");nspn = strspn(src, "916");printf("%s\n", src);printf("%s\n", pchr);printf("%s\n", prchr);printf("%s\n", ppbrk);printf("%s\n", pstr);printf("%d\n", ncspn);printf("%d\n", nspn);return 0;}运行结果:1564849916658156484991665815816484991665818499166581314. 字符串拷贝strcpy: 拷贝字符串函数定义: char *strcpy(char *dest, const char *scr);说明: strcpy()会将参数src字符串拷贝至参数dest所指的地址. 返回参数dest的字符串起始地址. 注意, 如果参数dest所指的内存空间不够大, 可能会造成缓冲溢出的错误情况,在编写程序时请特别留意, 或用strncpy()来取代.strncpy: 拷贝字符串(指定数目)函数定义: char *strncpy(char *dest, const char *src, size_t n);说明: strncpy()会将参数src字符串拷贝前n个字符至参数dest 所指的地址, 返回参数dest的字符串起始地址strdup: 拷贝字符串(自动配置内存空间)函数定义: char *strdup(const char *s);说明: strdup()会先用maolloc()配置与参数s字符串相同的空间大小, 然后将参数s字符串的内容复制到该内存地址, 然后把该地址返回. 该地址最后可以利用free()来释放. 返回一指向复制后的新字符串地址的指针; 若返回NULL表示内存不足.应用举例:#include <stdio.h>#include <string.h>#include <stdlib.h>int main(void){char *src = "abcdefghi";char *destcpy, *destncpy, *destdup;printf("%s\n", src);destcpy = (char *)malloc(strlen(src));strcpy(destcpy, src);printf("%s\n", destcpy);destncpy = (char *)malloc(strlen(src));strncpy(destncpy, src, 6);printf("%s\n", destncpy);destdup = strdup(src);printf("%s\n", destdup);free(destcpy);free(destncpy);free(destdup);return 0;}运行结果:abcdefghiabcdefghiabcdefabcdefghi5. 其它操作strfry: 随机重组字符串内的字符函数定义: char *strfry(char *string);说明: strfry()会利用rand()来随机重新分配参数string字符串内的字符, 然后返回指向参数string的指针.strlen: 返回字符串长度, 不包括结束符'/0'函数定义: size_t strlen(const char *s);说明: strlen()用来计算指定的字符串s的长度, 不包括结束字符'\0'.strtok: 分割字符串函数定义: char *strtok(char *s, const char *delim);说明: strtok()用来将字符串分割成一个个片段. 参数s指向欲分割的字符串, 参数delim则为分割字符串, 当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0字符. 在第一次调用时, strtok()必需给予参数s字符串, 往后的调用则将参数s设置成NULL. 每次调用成功则返回下一个分割后的字符串指针.应用举例:#include <stdio.h>#include <string.h>int main(void){char s[] = "as-vd; efdaf;fe-fdef?";char *d = "-; f";char *ps;printf("%s\t%d\n", s, strlen(s));printf("%s\n", strfry(s));printf("%s ", strtok(s, d));while((ps = strtok(NULL, d))){printf("%s ", ps);}printf("\n");return 0;}运行结果:as-vd; efdaf;fe-fdef? 21;edfvdas-ad; efeff-f?ed vdas ad e e ?。

java PPT 教学10

java PPT 教学10

– 变量strlen1中保存myStr的长度,值为5 – 变量strlen2中保存myStr2的长度,值为 7
字符串类
• 字符串的访问操作
– 汉字的字数统计问题: – 在很多编程语言中,一个汉字算作两个英 文字母 – Java中的字符串都是16位的Unicode格式, 其中每个汉字和英文字母都算作一个字符 – 这样避免了在汉字字数统计、中英文混杂 的文本处理、文本分割中出现的问题
– 程序显示结果: 34
字符串类
• 字符串长度和字符串容量
– append函数的作用是在当前字符串的末 尾添加新的字符串 – 添加的字符串长度为24,超过了16个字 符 – StringBuffer对象自动将容量由16扩充到 34,以完整地放下添加的字符串 – 出于预留余地的考虑,扩充后的容量一般 都大于需要的容量
0 五 1 岳 2 归 ↑ 3 来 4 不 5 看 6 山 7 ↑
字符串类
• 字符串的访问操作
– indexOf和lastIndexOf函数:搜索字符位 置 – 适用于String对象和StringBuffer对象 – indexOf函数的作用是从前往后搜索字符 第一次出现的位置 – lastIndexOf函数的作用是从后往前搜索字 符第一次出现的位置 – indexOf和lastIndexOf函数有很多种用法
字符串类
• 字符串的访问操作
– capacity函数:得到字符串容量 – 仅适用于StringBuffer对象 – charAt()函数:获得字符串中的某个字符 – 适用于String对象和StringBuffer对象
char myChar1, myChar2; String myStr = "僧游云隐寺"; StringBuffer myStr2 = new StringBuffer("五岳归来不看山"); myChar1 = myStr.charAt(0); myChar2 = myStr2.charAt(6);

第十讲 泛型、枚举、for语句的简化写法

第十讲 泛型、枚举、for语句的简化写法

运行该程序
枚举类型
枚举类型是种特殊的类,通常是一些已知取值的集合. 枚举的基本定义格式为: 枚举类型修饰词列表 enum 枚举类型名 { 枚举常量列表 } public enum EnumSeason { 如: 春季, 夏季, public enum EnumSeason 秋季, { 冬季, 春季,夏季,秋季,冬季 } }
枚举类型的声明
枚举类型修饰词可以有①注解: ②访问修饰符;③static;④严格浮点运算 strictfp四类.顶层枚举类的访问修饰符要么是public,要么省略;嵌套枚 举声明可以使用任何访问修饰符.Static总是省略掉. 枚举类型具有final的性质,但不能声明为final,也不能声明为abstract.
hasNext()//判断集合对象中是否还有未取到的元素 next()//返回下一个位置的元素
通过这两个方法可以遍历集合对象的元素.
用迭代器遍历集合对象元素的方法
for(Iterator<元素类型> i=集合对象.iterator(); i.hasNext(); ) { 用i.next()取得下一个元素进行处理 }
实例化时,指定实际类型参数, 实际类型参数必须是泛型类型参 数的子类型.
TestGenericity<Integer> tg=new TestGenericity<Integer>(); Integer b1=new Integer(1); Integer b2=new Integer(2); System.out.println (tg.sum(b1,b2)); } }
调用泛型类的方法.
能用类型参数声明数组,但不能创建数组
class TestGen <T> { T [] arg; //用类型参数声明数组,但 T[] arg=new T[10];不行 public TestGen(T [] a) { arg=a; } public static void main(String [] args) { Integer [] iarray=new Integer[3]; iarray[0]=2; iarray[1]=4; iarray[2]=6; TestGen<Integer> tgI=new TestGen<Integer>(iarray); for(int i=0;i<tgI.arg.length;i++) System.out.println (tgI.arg[i]); TestGen<String> tgS=new TestGen<String>(args); for(int i=0;i<tgS.arg.length;i++) System.out.println (tgS.arg[i]); } }

VBA中的字符串操作与处理技巧

VBA中的字符串操作与处理技巧

VBA中的字符串操作与处理技巧VBA(Visual Basic for Applications)是一种用于Microsoft Office应用程序的宏语言,通过使用VBA,我们可以自动化处理文档、电子表格和演示文稿等任务。

在VBA中,字符串操作和处理是非常常见且重要的需求,本文将介绍一些VBA中的字符串操作与处理技巧,帮助您更高效地处理字符串数据。

1. 字符串的连接与拼接在VBA中,我们可以使用“&”符号来连接两个字符串。

例如,有两个字符串变量str1和str2,我们可以使用str1 & str2来将它们连接起来。

另外,我们还可以使用VBA的内置函数Concatenate来拼接多个字符串。

例如,使用Concatenate(str1, str2, str3)可以将str1、str2和str3三个字符串拼接成一个新的字符串。

2. 字符串的长度与截取如果我们想知道一个字符串的长度,可以使用VBA的内置函数Len。

例如,Len("Hello, World!")会返回字符串的长度12。

在VBA中,我们可以使用Mid函数来截取字符串的一部分。

例如,Mid("Hello, World!", 1, 5)会返回字符串的前5个字符"Hello"。

3. 字符串的查找与替换在VBA中,我们可以使用VBA的内置函数Instr来查找一个字符串中子字符串的位置。

例如,Instr("Hello, World!", "World")会返回子字符串"World"在源字符串中的位置10。

另外,如果我们想要替换字符串中的某个子字符串,可以使用VBA的内置函数Replace。

例如,Replace("Hello, World!", "World", "Universe")会将字符串中的"World"替换为"Universe",返回"Hello, Universe!"。

c语言课件《字符串》概述

c语言课件《字符串》概述
或者char c[6]=“China”;
C h i n a \0
是字符串
注:以字符串方式赋值时,必须保证数组元素个数 ≥字 符个数+1,(字符串后面需自动加上一个'\0')。
2019/3/14 8/
8
一维字符数组的初始化

省略数组长度 如: char c[ ]={'C', 'h', 'i', 'n', 'a'};
第10章 字符串
本章学习内容
字符串常量 字符串处理函数 字符数组和字符指针 向函数传递字符串
从函数返回一个字符串指针
2019/3/14
2/
10.1字符串常量
"How are you"
ASCII码值为0
用双引号括起的一串字符
是字符串常量,C语言自 动为其添加'\0'结束符 一串以‘\0’结尾的字符序列在C语言中被看作
字符数组元素的访问
c2赋值’A’~’Z’,然后输出c1和c2中的数据
#include <stdio.h> void main () { char c1[10], c2[26]; int i; for(i=0; i<10; i++) c1[i]=i+48; for(i=0; i<26; i++) c2[i]=i+'A'; for(i=0; i<10; i++) printf("%c ",c1[i]); printf("\n"); for(i=0; i<26; i++) printf("%c ",c2[i]); printf("\n"); }

写出10个字符串方法

写出10个字符串方法

写出10个字符串方法字符串是计算机编程中重要的数据类型之一,它是由一系列字符组成的,可以用来存储和操作文本信息。

在编程过程中,我们需要使用各种字符串操作方法来处理字符串数据,下面是10个常用的字符串方法:1. 字符串长度:使用len()函数可以获取一个字符串的长度,即字符串中字符的个数。

2. 字符串切片:使用[]运算符和切片操作可以截取一个字符串中的一部分。

例如,s[2:5]表示从字符串s的第三个字符(下标为2)开始截取到第五个字符(下标为4)。

3. 字符串拼接:使用+运算符可以将两个字符串拼接在一起,例如s1 + s2将s1和s2连接成一个字符串。

4. 字符串查找:使用find()方法可以在一个字符串中查找某个子串,返回子串在字符串中第一次出现的下标,如果没有找到则返回-1。

5. 字符串替换:使用replace()方法可以将一个字符串中的某个子串替换为另一个字符串。

6. 字符串分割:使用split()方法可以将一个字符串按照指定的分隔符进行分割成多个子串,返回一个子串列表。

7. 字符串格式化:使用format()方法可以将一个字符串中占位符替换为变量的值。

例如,'Hello, {}!'.format(name)将字符串中的占位符{}替换为变量name的值。

8. 字符串大小写转换:使用upper()方法可以将一个字符串中的所有字母都转换为大写字母,使用lower()方法可以将所有字母都转换为小写字母。

9. 字符串去除空格:使用strip()方法可以去除一个字符串中开头和结尾的空格,lstrip()方法可以去除开头的空格,rstrip()方法可以去除结尾的空格。

10. 字符串反转:使用[::-1]可以将一个字符串反转,即将字符串中的字符顺序颠倒。

例如,s[::-1]将字符串s反转。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常见姓名: char name1[] = "张三"; char name2[] = "李四"; char name3[] = "王五"; 存储多个字符串: 1)二维数组 char name[][256] = { "张三", "李四", "王五" }; 2)一维指针数组 char *name[] = { "张三", "李四", "王五" };
字符串的遍历
char hi[] = "I am happy" ;
1.for循环遍历
for(i=0; i<11; i++) { printf("%c", hi[i]) } 2.直接输出 printf(hi); 3.字符串格式(%s)输出 printf("%s", hi);
字符串数组(二维字符数组)
示例:
#include<stdio.h> #include<string.h>
main() { char *hi = "hello", s2 = "Alice"; char str[256], *pstr; printf("%s \n", strcat(hi, " world"));//连接 printf("%s \n", strcpy(str, "come on")); //拷贝 printf("%s \n", strcmp("你好", "你好")); //比较 printf("%s \n", strlen(str)); //获取长度 printf("%s \n", strupr(str)); //转成大写 }
本讲小结
一、字符串的本质,与字符的区别 1)本质上是结尾为'\0'字符数组 2)单双引号,书写区别 3)输出格式"%c"和"%s" 二、字符串的定义与初始化 1)字面量 2)数组 3)指针 三、常见的字符串操作,及其操作的实现 连接、拷贝、比较、获取长度、大小写转换、拼接字符串
课后作业
通过自己查找参考,理解并实现以上常见的字符串操作 注:sprintf()只要掌握,不要求实现
常见的字符串操作函数
stdio.h 输入:scanf()、gets()、getchar() 输出:printf()、puts()、putchar() string.h 连接:strcat() 拷贝:strcpy() 比较:strcmp() 获取长度:strlen() 大小写转换:strupr()、strlwr() 拼接字符串:sprintf()
魔舟工作室
C语言入门
第十讲 字符串处理
Lellansin@
字符与字符串的区别
1)符号 字符 ' ' 单引号 字符串 " " 双引号 2)内容 字符 单个字符 字符串 多个字符 3)输入输出格式 字符 %c 字符串 %s 4)标识 字符串 '\0'做结尾
字符串的本质是?
字符串本质上就是一个字符数组 "hello world" 这样的字符串,就是包含其中各个元素的,并且结尾 为'\0'的一个一维字符数组 如: char hi[12]={'H','e','l','l','o',' ','w','o','r','l','d','\0'};
因为一个字符串要有'\0'作为结尾 所以字符数组的长度要比本身字符数目多一个 如上例中,字符串有11个,但是字符数组长度要达到12
字符串的定义与初始化
字符串面量: "Hello world" 注意:字面量是常量
字符数组: 1)数组形式 char hi[3]={'H', 'i','\0'}; char hello[]={'H','e','l','l','o',' ','w','o','r','l','d','\0'}; 2)直接赋首地址 char shool[20] = "第一中学"; 3)省略长度 char name1[] = "Alan"; char name2[] = { "Alan" }; 字符指针: char *name3 = "Alan"; char *s = "第一中学"; 思考: 指针能不能直接赋给数组?
思考: 指针能不能直接赋给数组?
canf来说,字符串最重要的是其起始地址 如打印一个字符串: char *text = "hey gays!"; 1) pirntf(text); 2) printf("%s", text); 对于printf这个函数而言,只要知道字符串开头的地址, 那么就一直打印下去,一直到碰到'\0'的时候停止 如: printf("Hello \0 world");
strlen()
#include<stdio.h> int mylength(char *aim); int main() { char *str1 = "hello "; printf("%d\n", mylength(str1)); } int mylength(char *aim) { int count=0; while(*aim++){ count++; } return count; }
strcat()
#include<stdio.h> char * mycat(char *a, char *insert); int main() { char *str1 = "hello ", *str2 = "world"; printf("%s\n", mycat(str1, str2)); } char * mycat(char *a, const char *insert) { char *address = a; while(*a != '\0') a++; while(*insert != '\0') *a++ = *insert++; *a = '\0'; return address; }
学会查询文档: 1.右键查看定义 2.度娘谷歌 3.手册 4.自己撰写自己的文档
关于函数传参数
对于:int add(int a, int b); 调用:add(5, 10); add函数中,相当于: int a = 5; int b = 10
对于:int swap(int *x, int *y); 调用:swap(&i, &j); swap函数中,相当与: int *x = &i; int *y = &j;
相关文档
最新文档