搜档网
当前位置:搜档网 › 字符串匹配技术研究

字符串匹配技术研究

字符串匹配技术研究
字符串匹配技术研究

微机原理实验2程序 - 字符串匹配实验

8086汇编语言程序实验: 实验二、字符串匹配实验 题目: 1、(必做题)编程实现:从键盘分别输入两个字符串(不必等长), 然后进行比较,若两个字符串有相同的字符,则显示“MATCH”,若字符都不相同则显示“NO MATCH”。 2、(选做题)编程实现:从键盘分别输入两个字符串,然后进行比 较,若两个字符串的长度和对应字符都完全相同,则显示“MATCH”,否则显示“NO MATCH”。 对应程序如下所示: ;第1题 ;==================================== HUICHE MACRO ;定义一个具有回车、换行功能的宏,为程序多次回车换行所调用。 MOV DL,0DH ;用2号功能“显示”回车。 MOV AH,02H INT 21H MOV DL,0AH ;用2号功能“显示”换行。 MOV AH,02H INT 21H ENDM DA TA SEGMENT MESSAGE1 DB 'MATCH','$' ;定义“MATCH”提示信息,“$”作为调用9号功能的结束符。 MESSAGE2 DB 'NO MATCH','$' ;定义“NO MATCH”提示信息。 TISHI1 DB 'Please input the first string:','$' ;提示输入第1个字符串的提示信息。 TISHI2 DB 'Please input the second string:','$' ;提示输入第1个字符串的提示信息。 STRING1 DB 100 ; 100为存第一个字符串的最大可用空间的字节数。 DB ? ;预留字节,存储将要输入的第1个字符串的实际长度。 DB 100 DUP(?) ;预留100个字节空间,用于存放第1个字符串。 STRING2 DB 100 DB ? DB 100 DUP(?) DA TA ENDS

excel中个单元格中有文字字母字符和数字如何能把数字单独提取出来提取数字

e x c e l中个单元格中有文字字母字符和数字如何能把数字单独提取出 来提取数字 集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]

excel中一个单元格中有文字字母字符和数字如何能把数字单独提取出来2011-04-13 11:25匿名|分类:|浏览1375次 如A1中 A本月电费收入(美兰供电所)(对帐标志: 想在B中表示为 最好能教一个方法十分感谢 我有更好的答案 按默认排序| 2条回答 |2011-04-13 11:32|十五级 在EXECL理,按ALT+F11,插入-模块,复制下列语句 Function SplitNumEng(str As String, sty As Byte) Dim StrA As String Dim StrB As String Dim StrC As String Dim i As Integer Dim SigS As String For i = 1 To Len(str) SigS = Mid(str, i, 1) If SigS Like "[a-zA-Z]" Then

StrA = StrA & SigS ElseIf SigS Like "#" Then StrB = StrB & SigS Else StrC = StrC & SigS End If Next i Select Case sty Case 1 SplitNumEng = StrA Case 2 SplitNumEng = StrB Case Else SplitNumEng = StrC End Select End Function 比如你的数据在A1 BI输入 =SplitNumEng(A1,1) 表示提取字母 =SplitNumEng(A1,2) 表示提取数字

字符串的模式匹配算法

在前面的图文中,我们讲了“串”这种数据结构,其中有求“子串在主串中的位置”(字符串的模式匹配)这样的算法。解决这类问题,通常我们的方法是枚举从A串(主串)的什么位置起开始与B串(子串)匹配,然后验证是否匹配。假设A串长度为n,B串长度为m,那么这种方法的复杂度是O(m*n)的。虽然很多时候复杂度达不到m*n(验证时只看头一两个字母就发现不匹配了),但是我们有许多“最坏情况”,比如: A=“aaaaaaaaaaaaaaaaaaaaaaaaab”,B=“aaaaaaaab”。 大家可以忍受朴素模式匹配算法(前缀暴力匹配算法)的低效吗?也许可以,也许无所谓。 有三位前辈D.E.Knuth、J.H.Morris、V.R.Pratt发表一个模式匹配算法,最坏情况下是O(m+n),可以大大避免重复遍历的情况,我们把它称之为克努特-莫里斯-普拉特算法,简称KMP算法。 假如,A=“abababaababacb”,B=“ababacb”,我们来看看KMP是怎样工作的。我们用两个指针i和j分别表示,。也就是说,i是不断增加的,随着i 的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前j个字符(j当然越大越好),现在需要检验A[i+1]和B[j+1]的关系。 例子: S=“abcdefgab” T=“abcdex” 对于要匹配的子串T来说,“abcdex”首字符“a”与后面的串“bcdex”中任意一个字符都不相等。也就是说,既然“a”不与自己后面的子串中任何一字符相等,那么对于主串S来说,前5位字符分别相等,意味着子串T的首字符“a”不可能与S串的第2到第5位的字符相等。朴素算法步骤2,3,4,5的判断都是多余,下次的起始位置就是第6个字符。 例子: S=“abcabcabc” T=“abcabx”

汇编语言查找匹配字符串

汇编语言实验二查找匹配字符串 一、目的 查找匹配字符串SEARCH 二、实验内容 程序接收用户键入的一个关键字以及一个句子。如果句子中不包含关键字则显示‘NO match!’;如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。 流程图

N Y Y Y 输入关键字 结束 关键字长度=0 输入句子 句子长度<关键字长度 Y 保存关键字长度到cx,cx 入栈,保存总循环次数(句子长度-关键字长度+1) 到al,将句子的首地址放进bx(作为基址寄存器)si=di=0(变址寄存器) 开始比较[bx+di]与[si]是否相等 si+1,di+1,cx-1(同时指向下一个字符) Y N bx+1(句子指向下一个字符)cx 出栈,再入栈,si,di 清零,al-1cx 是否为0 N 匹配完成,调用子程序输出 al 是否为0 不匹配,输出三、设计和编码 DATA SEGMENT mess1DB 'Enter keyword:','$'mess2DB 'Enter Sentence:','$'mess3DB 'Match at location:','$'mess4DB 'NOT MATCH.',13,10,'$'mess5DB 'H if the sentence',13,10,'$'

change DB13,10,'$' stoknin1label byte max1db10 act1db? stokn1db10dup(?) stoknin2label byte max2db50 act2db? stokn2db50dup(?) DATA ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODE SEGMENT ;*************************************代码段 main proc far assume cs:code,ds:data,es:data START: push ds sub AX,AX sub BX,BX sub DI,DI sub SI,SI push AX;为返回dos并清空后面要用到的寄存器 MOV AX,DATA MOV DS,AX LEA DX,mess1 MOV ah,09 INT21h;输出Enter keyword LEA DX,stoknin1 MOV ah,0ah;用21号中段的0ah号功能获取关键字 INT21h cmp act1,0 je exit;如果为空直接退出程序 a10: ;********************************输入Sentence并判断 LEA DX,change MOV ah,09 INT21h;输出回程,换行 LEA DX,mess2 MOV ah,09 INT21h;输出Enter Sentence: LEA DX,stoknin2 MOV ah,0ah INT21h;用21号中段的0ah号功能获取句子 MOV AL,act1 CBW MOV CX,AX;保存关键字长度到cx PUSH CX;cx入栈 MOV AL,act2 cmp AL,0 je a50;保存句子长度到al,若句子为空则跳转显示not match SUB AL,act1 js a50;若句子长度小于关键字长度,则跳转显示not match INC AL CBW LEA BX,stokn2;将句子的首地址放进BX MOV DI,0 MOV SI,0 a20: ;****************************************比较,内循环 MOV AH,[BX+DI] CMP AH,stokn1[SI];遇见字符不相等就跳转到a30

excel中取出字符串中的数字

excel中取出字符串中的数字 1.数据- "a12345y" 如何自动撷取其中的数字 2.数据- "12345" 如何自动只撷取其中间三个的数位(即234)放於其它格上 如果你的数据有固定的长度和格式,公式可以简单些,如,前后各有1位字母: A1="a12345y" B1=Mid(A1,2,5) 如果前后字母个数不固定: B1=MID(A1,MA TCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),),MATCH(0,0*MID(A1,ROW(IN DIRECT("1:"&LEN(A1))),1))-MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)+1) 数组公式,按Ctrl+Shift+Enter三键结束。 1、截取字符串中的一部分,用函数MID()。 A1="a12345y" 公式最外层是Mid()函数,该函数的格式是: Mid(文本,开始位置,长度) 对应公式是: MID(A1,MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),),MATCH(0,0*MID(A1,ROW(INDIR ECT("1:"&LEN(A1))),1))-MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),)+1) 2、长度=末位置-首位置+1。 其中MATCH()公式有不同的两个: 文本A1中第1个数字所在的位置:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),) 文本A1中最后1个数字所在的位置:MATCH(0,0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)) 两个公式不同之处,在于最后一个逗号。公式什么意思先别管,你只要知道: 长度=最后1个数字的位置-第1个数字的位置+1 本例中:6-2+1=5,数字长度为5。 3、拆散字符串。 下面公式取出字符串中的每一粒字符: MID(A1,1,1)="a" MID(A1,2,1)="1" …… MID(A1,6,1)="5" MID(A1,7,1)="y" 下面公式返回的是拆散后的一串字符(数组): MID(A1,{1;2;3;4;5;6;7},1)={"a";"1";"2";"3";"4";"5";"y"} 其中{1;2;3;4;5;6;7}用ROW(INDIRECT("1:"&LEN(A1)))计算所得。 这是数组公式中的一个基本技巧,如果还不懂,请从固顶的帖子中找到并学习它。 在编辑栏中,请用鼠标选取MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1) 然后按F9可以看到上面的结果。 4、0乘以任何数都得0吗? 你一定不会怀疑。 还是在编辑栏,请继续用鼠标选择: 0*{"a";"1";"2";"3";"4";"5";"y"},或者选择: 0*MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),按F9,结果显示为: {#VALUE!;0;0;0;0;0;#VALUE!}。真的不是“都得0”。 里面除了0,还有错误值。个数与原来数组元素的个数相同。

字符串匹配算法总结

Brute Force(BF或蛮力搜索) 算法: 这是世界上最简单的算法了。 首先将匹配串和模式串左对齐,然后从左向右一个一个进行比较,如果不成功则模式串向右移动一个单位。 速度最慢。 那么,怎么改进呢? 我们注意到Brute Force 算法是每次移动一个单位,一个一个单位移动显然太慢,是不是可以找到一些办法,让每次能够让模式串多移动一些位置呢? 当然是可以的。 我们也注意到,Brute Force 是很不intelligent 的,每次匹配不成功的时候,前面匹配成功的信息都被当作废物丢弃了,当然,就如现在的变废为宝一样,我们也同样可以将前面匹配成功的信息利用起来,极大地减少计算机的处理时间,节省成本。^_^ 注意,蛮力搜索算法虽然速度慢,但其很通用,文章最后会有一些更多的关于蛮力搜索的信息。 KMP算法 首先介绍的就是KMP 算法。 这个算法实在是太有名了,大学上的算法课程除了最笨的Brute Force 算法,然后就介绍了KMP 算法。也难怪,呵呵。谁让Knuth D.E. 这么world famous 呢,不仅拿了图灵奖,而且还写出了计算机界的Bible (业内人士一般简称TAOCP). 稍稍提一下,有个叫H.A.Simon的家伙,不仅拿了Turing Award ,顺手拿了个Nobel Economics Award ,做了AI 的爸爸,还是Chicago Univ的Politics PhD ,可谓全才。 KMP 的思想是这样的: 利用不匹配字符的前面那一段字符的最长前后缀来尽可能地跳过最大的距离 比如 模式串ababac这个时候我们发现在c 处不匹配,然后我们看c 前面那串字符串的最大相等前后缀,然后再来移动 下面的两个都是模式串,没有写出来匹配串 原始位置ababa c 移动之后aba bac 因为后缀是已经匹配了的,而前缀和后缀是相等的,所以直接把前缀移动到原来后缀处,再从原来的c 处,也就是现在的第二个b 处进行比较。这就是KMP 。 Horspool算法。 当然,有市场就有竞争,字符串匹配这么大一个市场,不可能让BF 和KMP 全部占了,于是又出现了几个强劲的对手。

提取excel中的一段数字、文字、符号方法

一、单元格A1中有如下内容:要提取出数字 经测试下列公式好用 提取Excel单元格中连续的数字的函数公式是: =LOOKUP(9E+307,--MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1234567890)),ROW($1:$8))) 或者 =LOOKUP(9E+307,--MID(H2,MIN(FIND({0;1;2;3;4;5;6;7;8;9},H2&1234567890)),ROW(INDIRECT("1:"&LEN(H2))))) 解释一下这个公式 FIND函数——查询文本所在位置 FIND(find_text,within_text,[start_num]) FIND(需查找的文本,包含查找文本的单元格,开始查找单元格的字符位置(可选)) 此处FIND函数是搜索{1,2,3,4,5,6,7,8,9,0}数字在“A1&1234567890”中所在的位置; A1&1234567890的目的是在用FIND函数查询时,不出现错误值,使之后的MIN函数可以正常运行。 即FIND({1,2,3,4,5,6,7,8,9,0},“小王联系电话58670098负责财务1234567890”) 选取划黑后按F9,得出的位置为:{19,20,21,22,7,9,10,8,13,11} MIN函数——返回列表中的最小值 MIN(number1,number2,……) MIN(数字1,数字2,……)

将FIND所得结果{19,20,21,22,7,9,10,8,13,11}带入MIN函数,最小值所得为7,正是第一个数值出现的位置; 也正是之前FIND函数中使用A1&1234567890的原因。 MID函数——返回文本字符串从指定位置开始特定数目的字符,即提取某段字符。 MID(text,start_num,num_chars) MID(被提取的文本或单元格,开始提取的字符位置,提取的字符个数) 将上述MIN函数所得带入MID(A1,7,ROW($1:$8); ROW($1:$8)使用row函数不是用来计算行,而是借用其作为常量。当然1:8是可以修改的,只要大于数值个数就不影响结果。 --MID(……)中“--”的作用是将MID得出的结果变为数值,使其可以被LOOKUP函数查询到。 MID(……)选取划黑后按F9{"5";"58";"586";"5867";"58670";"586700";"5867009";"58670098"} --MID(……)选取划黑后按F9{5;58;586;5867;58670;586700;5867009;58670098} LOOKUP函数——从返回某个查询的值(数组形式) LOOKUP(lookup_value,array) LOOKUP(在数组中查找的值,数组范围区域)

MySQL中的字符串模式匹配.

MySQL中的字符串模式匹配 本文关键字:MySQL 字符串模式匹配 MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep 和sed的扩展正则表达式模式匹配的格式。 标准的SQL模式匹配 SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模式缺省是忽略大小写的。下面显示一些例子。注意在你使用SQL模式时,你不能使用=或!=;而使用LIKE或NOT LIKE比较操作符。 例如,在表pet中,为了找出以“b”开头的名字: +--------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+------------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+--------+---------+------+------------+------------+ 为了找出以“fy”结尾的名字:

+--------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+-------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +--------+--------+---------+------+------------+-------+ 为了找出包含一个“w”的名字: +----------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+------------+

excel中个单元格中有文字字母字符和数字如何能把数字单独提取出来提取数字

excel中一个单元格中有文字字母字符和数字如何能把数字单独提取出来?2011-04-13 11:25匿名?|?分类:办公软件?|?浏览1375次 如A1中 A本月电费收入(美兰供电所)(对帐标志:2010.01.07) 想在B中表示为 20100107 最好能教一个方法十分感谢 我有更好的答案 按默认排序|按时间排序 2条回答 检举|2011-04-13 11:32Mrpine|十五级 在EXECL理,按ALT+F11,插入-模块,复制下列语句 Function SplitNumEng(str As String, sty As Byte) Dim StrA As String Dim StrB As String Dim StrC As String Dim i As Integer Dim SigS As String For i = 1 To Len(str) SigS = Mid(str, i, 1) If SigS Like "[a-zA-Z]" Then

StrA = StrA & SigS ElseIf SigS Like "#" Then StrB = StrB & SigS Else StrC = StrC & SigS End If Next i Select Case sty Case 1 SplitNumEng = StrA Case 2 SplitNumEng = StrB Case Else SplitNumEng = StrC End Select End Function 比如你的数据在A1 BI输入 =SplitNumEng(A1,1) 表示提取字母 =SplitNumEng(A1,2) 表示提取数字

KMP字符串模式匹配算法解释

个人觉得这篇文章是网上的介绍有关KMP算法更让人容易理解的文章了,确实说得很“详细”,耐心地把它看完肯定会有所收获的~~,另外有关模式函数值next[i]确实有很多版本啊,在另外一些面向对象的算法描述书中也有失效函数f(j)的说法,其实是一个意思,即next[j]=f(j-1)+1,不过还是next[j]这种表示法好理解啊: KMP字符串模式匹配详解 KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。 一.简单匹配算法 先来看一个简单匹配算法的函数: int Index_BF ( char S [ ], char T [ ], int pos ) { /* 若串S 中从第pos(S 的下标0≤pos

微机原理实验三 字符串匹配程序.

实验三字符串匹配程序 教学目标:通过教学让学生掌握显示提示信息的方法及接收键盘输入信息的方法。 重点、难点: 重点:字符串匹配的算法,用INT 21H 的09号子功能显示提示信息,用INT 21H的0A号子功能接收字符 难点:用INT 21H的0A号子功能接收字符 课时安排:2学时 教学过程:讲解实验过程 一实验目的: 掌握显示提示信息的方法及接收键盘输入信息的方法 二实验内容: 编写程序,实现两个字符串的比较。如相同,则显示“MATCH”,否则,显示”NO MATCH”. 三程序框图(讲解流程图,介绍编写程序的思路) 四实验原理 1、讲解DB、DUP、EQU等伪指令的功能以及使用格式 2、讲解INT 21H 的09H子功能的功能、工作情况以及使用格式 3、讲解INT 21H的0AH子功能的功能、工作情况以及使用格式 4、讲解串扫描指令SCASB的功能以及使用格式 5、入栈、出栈指令PUSH 、POP的使用情况 五实验参考程序

CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATA SEGMENT MESS1 DB 'MA TCH',0DH,0AH,'$' MESS2 DB 'NO MA TCH',0DH,0AH,'$' MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' MAXLEN1 DB 81 ACTLEN1 DB ? STRING1 DB 81 DUP(?) MAXLEN2 DB 81 ACTLEN2 DB ? STRING2 DB 81 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DATA START: MOV AX,DA TA MOV DS,AX MOV AX,DA TA MOV ES,AX MOV AX,STACK MOV SS,AX MOV SP,TOP ;段寄存器及堆栈初始化 MOV AH,09H MOV DX,OFFSET MESS3 INT 21H ;显示输入提示1 MOV AH,0AH MOV DX,OFFSET MAXLEN1 INT 21H ;接收键入的字符串1 CRLF ;回车换行 MOV AH,09H MOV DX,OFFSET MESS4 INT 21H ;显示输入提示2 MOV AH,0AH MOV DX,OFFSET MAXLEN2 INT 21H ;接收键入的字符串2 CRLF CLD

C语言字符串模式匹配

数据结构面试之十四——字符串的模式匹配 题注:《面试宝典》有相关习题,但思路相对不清晰,排版有错误,作者对此参考相关书籍和自己观点进行了重写,供大家参考。 十四、字符串的模式匹配 1. 模式匹配定义——子串的定位操作称为串的模式匹配。 2. 普通字符串匹配BF算法(Brute Force 算法,即蛮力算法) 【算法思想】: 第(1)步;从主串S的第pos个字符和模式的第一个字符进行比较之,若相等,则继续逐个比较后续字符;否则从主串的下一个字符起再重新和模式串的字符比较之。 第(2)步骤;依次类推,直至模式T中的每一个字符依次和主串S中的一个连续的字符序列相等,则称匹配成功;函数值为和模式T中第一个字符相等的字符在主串S中的序号,否则称为匹配不成功,函数值为0。 比如对于主串S=”abacababc”; 模式串T=”abab”; 匹配成功,返回4。 对于主串S=”abcabcabaac”; 模式串T=”abab”; 匹配不成功,返回0。 【算法实现】: //普通字符串匹配算法的实现 int Index(char* strS, char* strT, int pos) { //返回strT在strS中第pos个字符后出现的位置。 int i = pos; int j = 0; int k = 0; int lens = strlen(strS);

int lent = strlen(strT); while(i < lens && j < lent) { if(strS[i+k] == strT[j]) { ++j; //模式串跳步 ++k; //主串(内)跳步 } else { i = i+1; j=0; //指针回溯,下一个首位字符 k=0; } }//end i if(j >= lent) { return i; } else { return 0; } }//end [算法时间复杂度]:设主串长度为m,模式串的长度为n。一般情况下n

excel提取文本中数字公式

Excel提取文本中数字公式 第一种,如图,如果数字在中文的后面,那么使用公式:"=--RIGHT(A2,LEN(A2) *2-LENB(A2))"解释下:因为中文字符是占两个字节。而数字占一个字节。len 返回值是字符的个数。而lenb返回值是这个字符串占多少个字节。所以,这两个的差值就是一个有几个中文。LENB(A2)-LEN(A2) = 中文实际个数字符总数-中文个数=数字个数LEN(A2)-(LENB(A2)-LEN(A2) )=数字个数开括号数字个数=LEN(A2)*2-LENB(A2)。因为数字在右边,所以,利用RIGHT,获取从右边第一个开始到最后一个数字,就得到这个数值。 第二种:数字在中文的前面。实际上和第一种的方法是一样的,这儿只是取数字的时候,从左边开始。公式: "=--LEFT(A2,LEN(A2)*2-LENB(A2))" 第三种:混搭。这个其实就是加个判断,判断第一个字符是数字还是中文。如果是数字,那么就用上面的第二个公式,中文就用第一个公式。公式:“=IF(ISN UMBER(--LEFT(A2,1)),--RIGHT(A2,LEN(A2)*2-LENB(A2)),--LEFT(A2,LEN(A2)* 2-LENB(A2)))” ============================================= excel从特殊字符串提取指定数据

在日常工作中,常常会遇到以下的参数: 如何把直径单独提取出来,以便进行直径比较或按直径汇总。 步骤/方法 选定直径的提取单元格,输入如图所示的公式,回车即可。 下拉表格,将公式复制至其他表格,这样就完美的提取出规格数据中的直径数值,之后就可以进行数据分类和汇总了。

微机原理__字符匹配程序实验报告

太原理工大学现代科技学院 课程实验报告专业班级 学号 姓名 指导教师

一、实验目的 掌握提示信息的使用方法及键盘输入信息的用法。 二、实验内容 1、编写程序,实现两个字符串比较。如果两个字符串中有一个字符相同,显示“MATCH”,否则,显示“NO MATCH”。 2、程序框图 三、所用仪器与软件 仪器:电脑一台 软件:Masm for Windows 集成实验环境 2009、7 四、实验方法、步骤 1、编写程序代码 2、运行程序,修改错误代码

3、再次运行代码直至运行出正确结果 五、源码程序编制及分析注释 CRLF MACRO 宏定义 MOV AH,02H AH=02H MOV DL,0DH DL=0DH INT 21H 系统功能调用,输出回车字符 MOV AH,02H AH=02H MOV DL,0AH DL=0A INT 21H 系统功能调用,输出换行符ENDM 宏定义结束 DATA SEGMENT 定义数据段 MESS1 DB 'MATCH',0DH,0AH,'$' 定义8个数据储存单元MESS2 DB 'NO MATCH',0DH,0AH,'$' 定义11个数据储存单元MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' 定义17个数据储存单元MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' 定义17个数据储存单元MAXLEN1 DB 81 定义最大长度为81个字节ACTLEN1 DB ? STRING1 DB 81 DUP (?) 定义STRING1长度为81 MAXLEN2 DB 81 定义最大长度为81 ACTLEN2 DB ? STRING2 DB 81 DUP (?) 定义STRING2长度为81 DATA ENDS 数据段结束 STACK SEGMENT STACK 定义堆栈段 STA DB 50 DUP (?) 定义50个数据储存单元 TOP EQU LENGTH STA 给TOP赋值50 STACK ENDS 堆栈段结束 CODE SEGMENT 定义代码段 ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK 定义段基址 START: MOV AX,DATA MOV DS,AX 把DATA的首地址赋给DS MOV ES,AX 把DATA的首地址赋给ES MOV AX,STACK MOV SS,AX 把STACK的首地址赋给SS MOV SP,TOP 给SP赋值50 MOV AH,09H AH=09H MOV DX,OFFSET MESS3 把MESS3的偏移地址赋给DX INT 21H 系统功能调用 MOV AH,0AH AH=0AH MOV DX,OFFSET MAXLEN1 把MAXLEN1的偏移地址赋给DX INT 21H 系统功能调用 CRLF MOV AH,09H AH=09H MOV DX,OFFSET MESS4 把MESS4的偏移地址赋给DX INT 21H 系统功能调用 MOV AH,0AH AH=0AH

微机原理字符串匹配

大学学生实验报告 (2010 —2011 学年第二学期) 课程名称:微型计算机原理与接口技术开课实验室:205 2011年 5 月 30 日年级、专业、班电信091 学号姓名成绩 实验项目名称字符匹配程序指导 教师 教 师 评语教师签名: 年月日

一、实验目的、要求 1.掌握提示信息的使用方法及键盘输入信息的用法。 二、实验原理及基本技术路线图或实验内容 1.编写程序,实现两个字符串比较。如果两个字符串中有一个字符相同,显示“MATCH”,否则,显示“NO MATCH”。 2.程序框图 段寄存器及堆栈初始化 显示“请输入字符串1” 使用INT 21H的0A号子功能, 接收键入的字符串 显示“请输入字符串2” 指针SI指向串1的首字符 SI指向的字符串和串2中所有字符作比较 Y 相等? N SI+1,指向串1中下一字符 N 串1中的字符已取完? Y 显示“NO MATCH”显示“MATCH” 返回DOS

三、所用仪器、材料和软件 软件名称为:MASM FOR Windows 集成实验环境2009.7 四、实验方法、步骤 根据实验的目的在该环境中编写出源代码,在进行调试、运行后,看能否得出结果。 五、源码程序编制及分析注释 程序清单及注释 CRLF MACRO ;宏定义 MOV AH,02H ;AH=02H MOV DL,0DH ;DL=0DH INT 21H ;系统功能调用来输出个回车字符 MOV AH,02H ;AH=02H MOV DL,0AH ;DL=0AH INT 21H ;系统功能调用来输出一个换行符ENDM ;宏定义结束 DATA SEGMENT ;数据段定义 MESS1 DB 'MATCH',0DH,0AH,'$' ;定义8个存储单元的数据 MESS2 DB 'NO MATCH',0DH,0AH,'$' ;定义11个存储单元的数据MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' ;定义17个存储单元的数据MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' ;定义17个存储单元的数据MAXLEN1 DB 81 ;字符串1的缓冲区最大字符数ACTLEN1 DB ? ;字符串1的实际输入字符的个数STRING1 DB 81 DUP (?) ;用来存储字符串1的81个单元MAXLEN2 DB 81 ;字符串2的缓冲区最大字符数ACTLEN2 DB ? ;用来存放字符串2的实际字符个数STRING2 DB 81 DUP (?) ;用来存储字符串2的81个单元DATA ENDS ;数据段定义结束 STACK SEGMENT STACK ;堆栈段定义 STA DB 50 DUP (?) ;在堆栈段定义50个空字符TOP EQU LENGTH STA ;TOP=50 STACK ENDS ;堆栈段定义结束 CODE SEGMENT ;代码段定义 ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK ;段分配 START: MOV AX,DATA ; MOV DS,AX ;将数据段的段地址赋给DS MOV ES,AX ;将数据段的段地址赋给ES MOV AX,STACK ;

C语言-获取一个字符串中的数字组

/*输入一个字符串,内有数字和非数字字符,如a123x456_17960? 302tab5876,将其中连续的数字作为一个整数,请统计出一共有多少个整数,输出这些整数,并求出最长的整数的位数。*/ 说明:i,j,k用来遍历,flag作为是否是数字的标志,max表示最长的连续数字串,str[100]用来存放输入的字符串,a[10][10]用来存放数字串,最多可存放10组连续的数字,,,, #include #include main() {int i,j=0,k,flag=0,max=0; char str[100],a[10][10]; printf("请输入一串字符(包括数字)\n"); gets(str); for(i=0;str[i]!='\0';i++) if(48<=str[i]&&str[i]<=57) {if(flag==0) {j++; k=0; a[j][k]=str[i]; k++; flag=1;} else if(str[i+1]=='\0') { a[j][k]=str[i]; a[j][k+1]='\0'; } else { a[j][k]=str[i]; k++; } } else if(flag==1) { if(k>max) max=k; a[j][k]='\0'; flag=0; } printf("输入的字符串中,最长的数字串有%d位数字。数字串一共有%d个,分别是:\n",max,j); for(i=1;i<=j;i++) printf("%s\n",a[i]); }

程序大致流程图如下(“<=”是赋值):

字符串模式匹配

实验7、字符串查找 目的 掌握字符串模式匹配的经典算法。 问题描述 分别用简单方法和KMP方法实现index在文本串中查找指定字符串的功能。 步骤 1.定义字符串类型 2.实现简单的index操作,从文本串中查找指定字符串。 3.实现KMP方法的index操作,从文本串中查找指定字符串。 4.[选]建立一个文本文件,读入每一行来测试自己完成的练习,观察并理解程序的各 个处理。 设备和环境 PC计算机、Windows操作系统、C/C++开发环境 结论 能够理解和掌握字符串模式匹配的典型算法。 思考题 1.对KMP算法分别用手工和程序对某个模式串输出next和nextval。 朴素算法: #include #include #define NOTFOUND -1

#define ERROR -2 #define MAXLEN 100//字符串的最大长度 char S[MAXLEN+10],T[MAXLEN+10],st[MAXLEN+10];//串S和串T int S0,T0; //S0:串S的长度 T0:串T的长度 int pos; //pos的起始位置 void Init(char *S,int &S0)//读入字符串 { int len,i; New_Input: scanf("%s",st);//读入字符串 len=strlen(st); if (len>MAXLEN)//如果字符串的长度大于规定的字符串最大长度 { printf("This String is too long,Please Input a new one.nn"); goto New_Input;//重新读入字符串

sql取出字符串中的汉字-字母或是数字

go --创建函数(得到字符串中的汉字) create function [dbo].[m_getchinese] ( @chinese nvarchar(max) ) returns varchar(100) as begin while patindex('%[^吖-咗]%',@chinese)> 0 begin set @chinese =stuff(@chinese,patindex('%[^吖- 咗]%',@chinese),1,N''); end return @chinese end go --创建函数(得到字符串中的字母) create function [dbo].[m_getstr](@maco varchar(100)) returns varchar(max) as begin while patindex('%[^a-z]%',@maco)> 0 begin set @maco=stuff(@maco,patindex('%[^a-z]%',@maco),1,'') end return @maco end go --创建函数(得到字符串中的数字) create function [dbo].[m_getnumber] ( @mysql_one nvarchar(200) ) returns varchar(200) begin declare @mysql_two varchar(200) select @mysql_two=

substring(@mysql_one,patindex('%[0-9.]%',@mysql_one),patindex('%[ ^0-9.]%',substring(@mysql_one,patindex('%[0-9.]%',@mysql_one), len(@mysql_one)-patindex('%[0-9.]%',@mysql_one)+1))-1) return @mysql_two; end --测试 select dbo.[m_getchinese]('China2009中国HRB4-1v') select dbo.[m_getstr]('China2009中国HRB4-1v') select dbo.[m_getnumber]('China2009中国HRB4-1v') --运行结果 /* ----------- 中国 ----------- ChinaHRBv ----------- 2009 */ --说明一下 --上面这个取数字是可以取浮点型的 select dbo.[m_getnumber] ('字段.456A(AA)A')--正常 select dbo.[m_getnumber] ('CHinese2.1day')--正常 select dbo.[m_getnumber] ('Name5.01From')--正常 select dbo.[m_getnumber] ('9898Address')--正常 select dbo.[m_getnumber] ('aaaaaForm2.3333')--错误 --修正函数 go /* 取出字符串中间的数字(第二版)*/ create function [dbo].[m_getnumberV2.0] ( @mysql_one nvarchar(200) ) returns varchar(200) begin declare @mysql_two varchar(200)

相关主题