网站出错咨询电话,客户管理系统哪找,做的网站在百度上搜不出来,学院网站建设的现状分析一、实验内容#xff1a;
采用顺序结构存储串#xff0c;编写一个函数substring(strl,str2)#xff0c;用于判定str2是否为strl的子串#xff1b;编写一个函数#xff0c;实现在两个已知字符串中找出所有非空最长公共子串的长度和最长公共子串的个数#xff1b;
①字符…一、实验内容
采用顺序结构存储串编写一个函数substring(strl,str2)用于判定str2是否为strl的子串编写一个函数实现在两个已知字符串中找出所有非空最长公共子串的长度和最长公共子串的个数
①字符串匹配
#include stdio.h
#include string.h
/* 简单模式匹配算法 */
int simple_match( char *t, char *p )
{int n, m, i, j, k;n strlen( t );m strlen( p );for( j 0; j n - m; j ) { /* 顺序考察从t[j]开始的子串 */for( i 0; i m t[ji] p[i]; i );/* 从t[j]开始的子串与字符串p比较 */if( i m ) /* 匹配成功 */return 0;}return 1; /* 匹配失败 */
}void main()
{char *s1[]{ Abcabc, Abc123ab, eeefffg };char *s2[]{ aBc, c123, fge };int i;for( i 0; i 3; i ) {printf( 长字符串[%s] 匹配子串[%s] , s1[i], s2[i] );if( simple_match( s1[i], s2[i] ) 0 )printf( 匹配成功\n );elseprintf( 匹配失败\n );}
}
②公共字符串
公共字符串的源代码
#include stdio.h
#includestring.h
int commstr( char *str1, char *str2, int *lenpt )
{int len1, len2, ln, count, i, k, p;char *st, form[20];if( (len1strlen(str1)) (len2strlen(str2)) ) { /* 使str1的长度不小于str2 */st str1;str1 str2;str2 st;ln len1; len1 len2;len2 ln;}count 0;for( ln len2; ln 0; ln-- ) { /* 找长为ln的公共子串 */for( k 0; k ln len2; k ) {/* 自str2[k]开始的长为ln的子串与str1中的子串比较 */for( p 0; p ln len1; p ) {/* str1中的子串自str1[p]开始, 两子串比较通过对应字符逐一比较实现 */for( i 0; i ln str2[ki]str1[pi]; i );if( i ln ) { /* 找到一个最长公共子串 */sprintf( form, 子串%%d[%%%d.%ds]\n, ln, ln );printf( form, count, str2k );}}}if( count )break;}*lenpt ln;;return count;
}void main()
{int c, len;c commstr( Abc1AbcsAbcd123, 123Abc, len );printf( 共有%d个长为%d的公共子串\n, c, len );
}
二、实验结论 1.采用顺序结构存储串编写一个函数substring(strl,str2),用于判定str2是否为strl的子串。 [程序设计思路]设strl“aoa…am”str2“bb…b”从strl中找与b匹配的字符 a,若ab则判定a1b…ab若都相等则结果是str2是strl的子串否则继续比较a;之后的字符。
2.设两个字符串首指针分别为strl和str2它们的长度分别记为lenl和 len2。不失一般性设有len1len2,则它们最长的公共子串长度不会超过len2。程序为找最长的公共子串,考虑找指定长度的所有公共子串的子问题。在指定长度从len2开始逐一递减的寻找过程中一旦找到了公共子串,程序最先找到的公共字符串就是最长公共子串。输出非空最长公共子串的长度和最长公共子串的个数。 注意串是由零个或多个任意字符组成的字符序列。一般记做:s“a: az… an”n为串的长度,表示串中所包含的字符个数当n0时称为空串。