知识大全 第4章串习题练习答案
Posted 字符
篇首语:别裁伪体亲风雅,转益多师是汝师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 第4章串习题练习答案相关的知识,希望对你有一定的参考价值。
简述下列每对术语的区别 空串和空白串 串常量和串变量 主串和子串 静态分配的顺序串和动态分配的顺序串 目标串和模式串 有效位移和无效位移 答 ●空串是指不包含任何字符的串 它的长度为零 空白串是指包含一个或多个空格的串 空格也是字符 ●串常量是指在程序中只可引用但不可改变其值的串 串变量是可以在运行中改变其值的 ●主串和子串是相对的 一个串中任意个连续字符组成的串就是这个串的子串 而包含子串的串就称为主串 ●静态分配的顺序串是指串的存储空间是确定的 即串值空间的大小是静态的 在编译时刻就被确定 动态分配的顺序串是在编译时不分配串值空间 在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定 也是顺序存储空间) ●目标串和模式串:在串匹配运算过程中 将主串称为目标串 而将需要匹配的子串称为模式串 两者是相对的 ●有效位移和无效位移 在串定位运算中 模式串从目标的首位开始向右位移 每一次合法位移后如果模式串与目标中相应的字符相同 则这次位移就是有效位移(也就是从此位置开始的匹配成功) 反之 若有不相同的字符存在 则此次位移就是无效位移(也就是从此位置开始的匹配失败)
假设有如下的串说明 char s [ ]= Stocktom CA s [ ]= March s [ ] *p; ( )在执行如下的每个语句后p的值是什么? p=stchr(s t ); p=strchr(s ); p=strchr(s ); ( )在执行下列语句后 s 的值是什么? strcpy(s s ); strcat(s ); strcat(s s ); ( )调用函数strcmp(s s )的返回值是什么? ( )调用函数strcmp(&s [ ] ton )的返回值是什么? ( )调用函数stlen(strcat(s s ))的返回值是什么?解 ( ) stchr(*s c)函数的功能是查找字符c在串s中的位置 若找到 则返回该位置 否则返回NULL 因此: 执行p=stchr(s t );后p的值是指向第一个字符t的位置 也就是p==&s [ ] 执行p=strchr(s );后p的值是指向s 串中第一个 所在的位置 也就是p==&s [ ] ` 执行p=strchr(s );之后 p的返回值是NULL ( )strcpy函数功能是串拷贝 strcat函数的功能是串联接 所以: 在执行strcpy(s s ); 后 s 的值是 Stocktom CA 在执行strcat(s ); 后 s 的值变成 Stocktom Ca 在执行完strcat(s s );后 s 的值就成了 Stocktom Ca March ( )函数strcmp(串 串 )的功能是串比较 按串的大小进行比较 返回大于 等于 或小于 的值以表示串 比串 大 串 等于串 串 小于串 因此在调用函数strcmp(s s )后 返回值是大于 的数(字符比较是以ascii码值相比的) ( )首先 我们要知道&s [ ]是一个地址 当放在函数strcmp中时 它就表示指向以它为首地址的一个字符串 所以在strcmp( &s [ ] ton )中 前一个字符串值是 tom CA 用它和 ton 比较 应该是后者更大 所以返回值是小于 的数 ( )strlen是求串长的函数 我们先将s s 联接起来 值是 Stocktom CAMarch 数一数有几个字符?是不是 个(空格也是一个)? 所以返回值是
设T[ n ]= adaabaabcaabaa P[ m ]= aab 当用模式串匹配目标串T时 请给出所有的有效位移 算法NaiveStrMatch(T P)返回的位移是哪一个位移 解 所有的有效位移i的值为 算法NaveStrMatch(T P)的返回值是第一个有效位移 因此是
利用C的库函数strlen strcpy和strcat写一算法void StrInsert(char *S char *T int i) 将串T插入到串S的第i个位置上 若i大于S的长度 则插入不执行 解 算法如下 void StrInsert(char *S char *T int i) //将串T插入到串S的第i个位置上 char *Temp; if(i<=strlen(S)) Temp=(char *)malloc(sizeof(char[Maxsize]));// 设置一个临时串 strcpy(Temp &S[i]);//将第i位起以后的字符拷贝到临时串中 strcpy(&S[i] T);//将串T拷贝到串S的第i个位置处 覆蓋后面的字符 strcat(S Temp);//把临时串中的字符联接到串S后面 free( Temp );
利用C的库函数strlen 和strcpy(或strncpy)写一算法void StrDelete(char *S int i int m)删去串S中从位置i开始的连续m个字符 若i≥strlen(S) 则没有字符被删除 若i+m≥strlen(S) 则将S中从位置i开始直至末尾的字符均删去 解 算法如下 void StrDelete(char *S int i int m) //串删除 char Temp[Maxsize];//定义一个临时串 if(i+m<strlen(S)) strcpy (Temp &S[i+m]);//把删除的字符以后的字符保存到临时串中 strcpy( &S[i] Temp);//用临时串中的字符覆蓋位置i之后的字符 else if(i+m>=strlen(S)&& i<strlen(S)) strcpy(&S[i] \\ );//把位置i的元素置为 \\ 表示串结束
以HString为存储表示 写一个求子串的算法 解 HString 是指以动态分配顺序串为存储表示 其定义为 typedef struct char *ch; int length; HString; void *substr( HString *sub HString *s int pos int len) //用sub返回串s的第pos个字符起长度为len的子串 sub初始时为一空串 //pos的合法位置为 <=pos<=s >length int i; if (pos< ||pos>s >length ||len<= ) Error( parameter error! );//参数不合法 子串为空串 if (s >length<pos+len)//s串中没有足够的元素 sub >len=s >length pos;//设置子串的串长 else sub >length=len; //设置子串的串长 sub >ch=(char *)malloc(len*sizeof(char));//为sub >ch申请结点空间 for(i= ;i<sub >length;i++)//将s串中pos位置开始的共sub >length个字符复制到sub串中 sub >ch[i]=s >ch[pos+i];
一个文本串可用事先给定的字母映射表进行加密 例如 设字母映射表为 a b c d e f g h i j k l m n o p q r s t u v w x y z n g z q t c o b m u h e l k p d a w x f y i v r s j 则字符串 encrypt 被加密为 tkzwsdf 试写一算法将输入的文本串进行加密后输出 另写一算法 将输入的已加密的文本串进行解密后输出 解 加密算法可以用两个串中字符的一一对应关系来实现 当输入一个字符时 由算法在串Original中查找其位置 然后用串Cipher中相应位置的字符去替换原来的字符就可以了 解密算法则恰恰相返 设字母映射表的存储结构如下 #define MaxStrSize typedef struct char Original[MaxStrSize]; //可容纳 个字符 并依次存储在Original[ n]中 char Cipher[MaxStrSize]; //可容纳 个字符 并依次对应Original表中的密码 int length; SeqString; void Encrypt( SeqString codetable) //加密算法 char ch; int i; while((ch=getchar())!= \\ ) i= ; while (i<codetable length&&ch!=codetable Original[i]) i++; if (i>=codetable length) Error( data error! ); else printf( %c codetable Cipher[i]); printf( \\n ); void Decipher(SeqString Original SeqString Cipher char* T) //解密算法 char ch; while((ch=getchar())!= \\ ) i= ; while (i<codetable length&&ch!=codetable Cipher[i]) i++; if (i>=codetable length) Error( data error! ); else printf( %c codetable Original[i]); printf( \\n );
相关参考
*二叉树的遍历算法可写为通用形式例如通用的中序遍历为 voidInorder(BinTreeTvoid(*visit)(DataTypex)) if(T) Inorder(T>lchil
常见的文件组织方式有哪几种?各有何特点?文件上的操作有哪几种?如何评价文件组织的效率?答 常用的文件组织方式有顺序文件索引文件散列文件和多关键字文件 ●顺序文件的
试描述头指针头结点开始结点的区别并说明头指针和头结点的作用答 开始结点是指链表中的第一个结点也就是没有直接前趋的那个结点 链表的头指
将哨兵放在R[n]中被排序的记录放在R[n]中重写直接插入排序算法解 重写的算法如下 voidInsertSort(SeqListR) //对顺序表中记录
在图所示的各无向图中 ()找出所有的简单环 ()哪些图是连通图?对非连通图给出其连通分量 ()哪些图是自由树(或森林)?答: ()所有的简单环(同一个环可以任一顶点作为起点) (a)
对含有n个互不相同元素的集合同时找最大元和最小元至少需进行多少次比较? 答 设变量max和min用于存放最大元和最小元(的位置)第一次取两个元素进行比较大的放入max小的放入min从第次开
设将整数依次进栈但只要出栈时栈非空则可将出栈操作按任何次序夹入其中请回答下述问题 ()若入出栈次序为Push()Pop()Push()Push()Pop()Pop()Push()Pop(
以关键字序列()为例分别写出执行以下排序算法的各趟排序结束时关键字序列的状态 ()直接插入排序()希尔排序()冒泡排序()快速排序 ()直接选择排序()堆排序()归并排序()基数排序 上述方法中哪些
假设在树中结点x是结点y的双亲时用(xy)来表示树边已知一棵树边的集合为(im)(in)(ei)(be)(bd)(ab)(gj)(gk)(cg)(cf)(hl)(ch)(ac)用树形表示法出此树并回答
设散列表长度为散列函数h(x)=x%给定的关键字序列为试画出分别用拉链法和线性探查法解决冲突时所构造的散列表并求出在等概率情况下这两种方法查找成功和失败时的平均查找长度请问装填因子的值是什么?&nbs